protobuf-generate 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/protobuf/generate/language/c/c.erb +39 -44
- data/lib/protobuf/generate/language/c/h.erb +25 -21
- data/lib/protobuf/generate/language/c.rb +1 -11
- data/lib/protobuf/generate/parser.rb +19 -4
- data/protobuf-generate.gemspec +1 -1
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5a62cd275937980b1b0288c6c4c89ebae992616
|
4
|
+
data.tar.gz: 697457604b2bdf9f5f68618925df3091c1d3b137
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77564ae6657f10076c844674d118cb7693e7563c752505a0bf1b9f7d28500ac8c5e355238d31b60eabc0eada4c450bafcebc2b7da65cac667ecc2f052b4bd0b1
|
7
|
+
data.tar.gz: 7c74335a4d38437e6b64853dfb247140fdd60ed642e1818cb108f74417e1bc817bbee70cacb1561318fb5585c2b17976d4938a9c69aef751ae78e8aba5b5aabf
|
@@ -9,7 +9,7 @@ static int write_raw_byte(uint8_t value, uint8_t *buffer, int offset) {
|
|
9
9
|
return ++offset;
|
10
10
|
}
|
11
11
|
|
12
|
-
|
12
|
+
int write_raw_little_endian32(uint32_t value, uint8_t *buffer, int offset) {
|
13
13
|
offset = write_raw_byte((uint8_t)((value ) & 0xFF), buffer, offset);
|
14
14
|
offset = write_raw_byte((uint8_t)((value >> 8) & 0xFF), buffer, offset);
|
15
15
|
offset = write_raw_byte((uint8_t)((value >> 16) & 0xFF), buffer, offset);
|
@@ -17,7 +17,7 @@ static int write_raw_little_endian32(uint32_t value, uint8_t *buffer, int offset
|
|
17
17
|
return offset;
|
18
18
|
}
|
19
19
|
|
20
|
-
|
20
|
+
int write_raw_little_endian64(uint64_t value, uint8_t *buffer, int offset) {
|
21
21
|
offset = write_raw_byte((uint8_t)((value ) & 0xFF), buffer, offset);
|
22
22
|
offset = write_raw_byte((uint8_t)((value >> 8) & 0xFF), buffer, offset);
|
23
23
|
offset = write_raw_byte((uint8_t)((value >> 16) & 0xFF), buffer, offset);
|
@@ -29,7 +29,7 @@ static int write_raw_little_endian64(uint64_t value, uint8_t *buffer, int offset
|
|
29
29
|
return offset;
|
30
30
|
}
|
31
31
|
|
32
|
-
|
32
|
+
int write_raw_varint32(uint32_t value, uint8_t *buffer, int offset) {
|
33
33
|
while (1) {
|
34
34
|
if ((value & ~0x7F) == 0) {
|
35
35
|
offset = write_raw_byte((uint8_t)value, buffer, offset);
|
@@ -42,7 +42,7 @@ static int write_raw_varint32(uint32_t value, uint8_t *buffer, int offset) {
|
|
42
42
|
return offset;
|
43
43
|
}
|
44
44
|
|
45
|
-
|
45
|
+
int write_raw_varint64(uint64_t value, uint8_t *buffer, int offset) {
|
46
46
|
while (1) {
|
47
47
|
if ((value & ~0x7FL) == 0) {
|
48
48
|
offset = write_raw_byte((uint8_t)value, buffer, offset);
|
@@ -82,7 +82,7 @@ static inline int read_raw_byte(uint8_t *tag, const uint8_t *buffer, int offset)
|
|
82
82
|
return ++offset;
|
83
83
|
}
|
84
84
|
|
85
|
-
|
85
|
+
int read_raw_little_endian32(uint32_t *tag, const uint8_t *buffer, int offset) {
|
86
86
|
offset = read_raw_byte((uint8_t *)tag, buffer, offset);
|
87
87
|
uint8_t b1 = (uint8_t)*tag;
|
88
88
|
offset = read_raw_byte((uint8_t *)tag, buffer, offset);
|
@@ -99,7 +99,7 @@ static int read_raw_little_endian32(uint32_t *tag, const uint8_t *buffer, int of
|
|
99
99
|
return offset;
|
100
100
|
}
|
101
101
|
|
102
|
-
|
102
|
+
int read_raw_little_endian64(uint64_t *tag, const uint8_t *buffer, int offset) {
|
103
103
|
offset = read_raw_byte((uint8_t *)tag, buffer, offset);
|
104
104
|
uint8_t b1 = (uint8_t)*tag;
|
105
105
|
offset = read_raw_byte((uint8_t *)tag, buffer, offset);
|
@@ -129,7 +129,7 @@ static int read_raw_little_endian64(uint64_t *tag, const uint8_t *buffer, int of
|
|
129
129
|
return offset;
|
130
130
|
}
|
131
131
|
|
132
|
-
|
132
|
+
int read_raw_varint32(uint32_t *tag, const uint8_t *buffer, int offset) {
|
133
133
|
uint8_t result;
|
134
134
|
|
135
135
|
offset = read_raw_byte(&result, buffer, offset);
|
@@ -172,7 +172,7 @@ static int read_raw_varint32(uint32_t *tag, const uint8_t *buffer, int offset) {
|
|
172
172
|
return offset;
|
173
173
|
}
|
174
174
|
|
175
|
-
|
175
|
+
int read_raw_varint64(uint64_t *tag, const uint8_t *buffer, int offset) {
|
176
176
|
short shift = 0;
|
177
177
|
uint8_t b;
|
178
178
|
*tag = 0;
|
@@ -189,24 +189,19 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
189
189
|
}
|
190
190
|
|
191
191
|
<% each do |exp| %>
|
192
|
-
<%
|
193
|
-
|
194
|
-
|
195
|
-
elsif exp.kind_of?(Protobuf::Generate::Ast::Enum)
|
196
|
-
%>
|
197
|
-
<% elsif exp.kind_of?(Protobuf::Generate::Ast::Message) %>
|
198
|
-
|
199
|
-
void <%= namespaced_function exp.name, 'clear' %>(<%= namespaced_type exp.name %> *pb) {
|
192
|
+
<% if exp.kind_of?(Protobuf::Generate::Ast::Message) %>
|
193
|
+
|
194
|
+
void <%= function exp.package, exp.name, 'clear' %>(<%= type exp.package, exp.name %> *pb) {
|
200
195
|
memset(pb, 0, sizeof(*pb));
|
201
196
|
}
|
202
197
|
|
203
|
-
void <%=
|
198
|
+
void <%= function exp.package, exp.name, 'init', 'optional', 'attributes' %>(<%= type exp.package, exp.name %> *pb) {
|
204
199
|
<% exp.fields.each do |field| %>
|
205
200
|
<% if field.optional? %>
|
206
201
|
<% if type_message?(field.type) %>
|
207
|
-
<%=
|
202
|
+
<%= function exp.package, field.type, 'init', 'optional', 'attributes' %>(&pb-><%= field.name %>);
|
208
203
|
<% elsif type_enum?(field.type) %>
|
209
|
-
pb-><%= field.name %> = <%=
|
204
|
+
pb-><%= field.name %> = <%= constant exp.package, field.type, type_enum_default(field.type, field.options.fetch('default', nil)) %>;
|
210
205
|
<% elsif field.type =~ /bool/ %>
|
211
206
|
pb-><%= field.name %> = <%= field.options.fetch(:default, 'false') %>;
|
212
207
|
<% elsif field.type =~ /string/ %>
|
@@ -223,13 +218,13 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
223
218
|
return;
|
224
219
|
}
|
225
220
|
|
226
|
-
bool <%=
|
221
|
+
bool <%= function exp.package, exp.name, 'is', 'default', 'message' %>(const <%= type exp.package, exp.name %> *pb) {
|
227
222
|
return true
|
228
223
|
<% exp.fields.each do |field| %> // <%= field.name %>
|
229
224
|
<% if type_message?(field.type) %>
|
230
|
-
&& <%=
|
225
|
+
&& <%= function exp.package, field.type, 'is', 'default', 'message' %>(&pb-><%= field.name %>)
|
231
226
|
<% elsif type_enum?(field.type) %>
|
232
|
-
&& pb-><%= field.name %> == <%=
|
227
|
+
&& pb-><%= field.name %> == <%= constant exp.package, field.type, type_enum_default(field.type, field.options.fetch('default', nil)) %>
|
233
228
|
<% elsif field.type =~ /string|bytes/ %>
|
234
229
|
&& memcmp(&pb-><%= field.name %>.data, <%= field.options.fetch('default', '""') %>, <%= field.meta.fetch('size_max', field.options.fetch('default', '').bytesize) %>) == 0
|
235
230
|
&& pb-><%= field.name %>.size == <%= field.options.fetch('default', '').bytesize %>
|
@@ -239,15 +234,15 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
239
234
|
<% end %>;
|
240
235
|
}
|
241
236
|
|
242
|
-
int <%=
|
237
|
+
int <%= function exp.package, exp.name, 'write' %>(const <%= type exp.package, exp.name %> *pb, uint8_t *buffer, int offset) {
|
243
238
|
<% exp.fields.each do |field| %> // <%= field.name %>
|
244
239
|
<% if field.optional? %>
|
245
240
|
<% if type_message?(field.type) %>
|
246
|
-
if (!<%=
|
247
|
-
offset = <%=
|
241
|
+
if (!<%= function exp.package, field.type, 'is', 'default', 'message' %>(&pb-><%= field.name %>)) {
|
242
|
+
offset = <%= function exp.package, field.type, 'write', 'with', 'tag' %>(&pb-><%= field.name %>, buffer, offset, <%= field.tag %>);
|
248
243
|
}
|
249
244
|
<% elsif type_enum?(field.type) %>
|
250
|
-
if (pb-><%= field.name %> != <%=
|
245
|
+
if (pb-><%= field.name %> != <%= constant exp.package, field.type, type_enum_default(field.type, field.options.fetch('default', nil)) %>) {
|
251
246
|
offset = write_raw_varint32((<%= field.tag %><<3)+0, buffer, offset);
|
252
247
|
offset = write_raw_varint32(pb-><%= field.name %>, buffer, offset);
|
253
248
|
}
|
@@ -264,7 +259,7 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
264
259
|
<% elsif field.type =~ /int32/%>
|
265
260
|
if (pb-><%= field.name %> != <%= field.options.fetch('default', 0) %>) {
|
266
261
|
offset = write_raw_varint32((<%= field.tag %><<3)+<%= type_wire field.type %>, buffer, offset);
|
267
|
-
if (pb-><%= field.name %> >= 0) offset =
|
262
|
+
if (pb-><%= field.name %> >= 0) offset = write_raw_varint32(pb-><%= field.name %>, buffer, offset);
|
268
263
|
else offset = write_raw_varint64(pb-><%= field.name %>, buffer, offset);
|
269
264
|
}
|
270
265
|
<% elsif field.type =~ /int64/ %>
|
@@ -322,7 +317,7 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
322
317
|
<% end %>
|
323
318
|
<% else %>
|
324
319
|
<% if type_message?(field.type) %>
|
325
|
-
offset = <%=
|
320
|
+
offset = <%= function exp.package, field.type, 'write', 'with', 'tag' %>(&pb-><%= field.name %>, buffer, offset, <%= field.tag %>);
|
326
321
|
<% elsif type_enum?(field.type) %>
|
327
322
|
offset = write_raw_varint32((<%= field.tag %><<3)+0, buffer, offset);
|
328
323
|
offset = write_raw_varint32(pb-><%= field.name %>, buffer, offset);
|
@@ -334,7 +329,7 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
334
329
|
offset = write_raw_little_endian32(*(uint32_t *)&pb-><%= field.name %>, buffer, offset);
|
335
330
|
<% elsif field.type =~ /int32/ %>
|
336
331
|
offset = write_raw_varint32((<%= field.tag %><<3)+<%= type_wire field.type %>, buffer, offset);
|
337
|
-
if (pb-><%= field.name %> >= 0) offset =
|
332
|
+
if (pb-><%= field.name %> >= 0) offset = write_raw_varint32(pb-><%= field.name %>, buffer, offset);
|
338
333
|
else offset = write_raw_varint64(pb-><%= field.name %>, buffer, offset);
|
339
334
|
<% elsif field.type =~ /int64/ %>
|
340
335
|
offset = write_raw_varint32((<%= field.tag %><<3)+<%= type_wire field.type %>, buffer, offset);
|
@@ -374,10 +369,10 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
374
369
|
return offset;
|
375
370
|
}
|
376
371
|
|
377
|
-
int <%=
|
372
|
+
int <%= function exp.package, exp.name, 'write', 'delimited', 'to' %>(const <%= type exp.package, exp.name %> *pb, uint8_t *buffer, int offset) {
|
378
373
|
int i, shift, new_offset, size;
|
379
374
|
|
380
|
-
new_offset = <%=
|
375
|
+
new_offset = <%= function exp.package, exp.name, 'write' %>(pb, buffer, offset);
|
381
376
|
size = new_offset - offset;
|
382
377
|
shift = (size > 127) ? 2 : 1;
|
383
378
|
for (i = new_offset - 1; i >= offset; -- i)
|
@@ -387,22 +382,22 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
387
382
|
return new_offset + shift;
|
388
383
|
}
|
389
384
|
|
390
|
-
int <%=
|
385
|
+
int <%= function exp.package, exp.name, 'write', 'with', 'tag' %>(const <%= type exp.package, exp.name %> *pb, uint8_t *buffer, int offset, int tag) {
|
391
386
|
offset = write_raw_varint32((tag<<3)+2, buffer, offset);
|
392
|
-
offset = <%=
|
387
|
+
offset = <%= function exp.package, exp.name, 'write', 'delimited', 'to' %>(pb, buffer, offset);
|
393
388
|
return offset;
|
394
389
|
}
|
395
390
|
|
396
|
-
int <%=
|
397
|
-
*encoded_size = <%=
|
391
|
+
int <%= function exp.package, exp.name, 'encode' %>(const <%= type exp.package, exp.name %> *pb, uint8_t *data, size_t data_size, size_t *encoded_size) {
|
392
|
+
*encoded_size = <%= function exp.package, exp.name, 'write', 'delimited', 'to' %>(pb, data, -1);
|
398
393
|
return 0; // TODO: Encoding errors.
|
399
394
|
}
|
400
395
|
|
401
|
-
int <%=
|
396
|
+
int <%= function exp.package, exp.name, 'read', 'delimited', 'from' %>(<%= type exp.package, exp.name %> *pb, const uint8_t *buffer, int offset);
|
402
397
|
|
403
|
-
int <%=
|
404
|
-
<%=
|
405
|
-
<%=
|
398
|
+
int <%= function exp.package, exp.name, 'read' %>(<%= type exp.package, exp.name %> *pb, const uint8_t *buffer, int offset, int limit) {
|
399
|
+
<%= function exp.package, exp.name, 'clear' %>(pb);
|
400
|
+
<%= function exp.package, exp.name, 'init', 'optional', 'attributes' %>(pb);
|
406
401
|
|
407
402
|
uint32_t tag = 0;
|
408
403
|
while (offset < limit) {
|
@@ -413,7 +408,7 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
413
408
|
case <%= field.tag %>:
|
414
409
|
// <%= field.name %>
|
415
410
|
<% if type_message?(field.type) %>
|
416
|
-
offset = <%=
|
411
|
+
offset = <%= function exp.package, field.type, 'read', 'delimited', 'from' %>(&pb-><%= field.name %>, buffer, offset);
|
417
412
|
<% elsif type_enum?(field.type) %>
|
418
413
|
offset = read_raw_varint32(&tag, buffer, offset);
|
419
414
|
pb-><%= field.name %> = tag;
|
@@ -487,15 +482,15 @@ static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
|
|
487
482
|
return offset;
|
488
483
|
}
|
489
484
|
|
490
|
-
int <%=
|
485
|
+
int <%= function exp.package, exp.name, 'read', 'delimited', 'from' %>(<%= type exp.package, exp.name %> *pb, const uint8_t *buffer, int offset) {
|
491
486
|
uint32_t size;
|
492
487
|
offset = read_raw_varint32(&size, buffer, offset);
|
493
|
-
<%=
|
488
|
+
<%= function exp.package, exp.name, 'read' %>(pb, buffer, offset, size + offset);
|
494
489
|
return offset + size;
|
495
490
|
}
|
496
491
|
|
497
|
-
int <%=
|
498
|
-
*encoded_size = <%=
|
492
|
+
int <%= function exp.package, exp.name, 'decode' %>(<%= type exp.package, exp.name %> *pb, const uint8_t *data, size_t data_size, size_t *encoded_size) {
|
493
|
+
*encoded_size = <%= function exp.package, exp.name, 'read' %>(pb, data, 0, data_size);
|
499
494
|
return 0; // TODO: Decoding errors.
|
500
495
|
}
|
501
496
|
<% end %>
|
@@ -7,28 +7,34 @@
|
|
7
7
|
#ifdef __cplusplus
|
8
8
|
extern "C" {
|
9
9
|
#endif
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
|
11
|
+
// TODO: Export to avoid unused function errors with -Werror.
|
12
|
+
// Remove. Have parser count type usage and only include the code if required.
|
13
|
+
int write_raw_little_endian32(uint32_t value, uint8_t *buffer, int offset);
|
14
|
+
int write_raw_little_endian64(uint64_t value, uint8_t *buffer, int offset);
|
15
|
+
int write_raw_varint32(uint32_t value, uint8_t *buffer, int offset);
|
16
|
+
int write_raw_varint64(uint64_t value, uint8_t *buffer, int offset);
|
17
|
+
int read_raw_little_endian32(uint32_t *tag, const uint8_t *buffer, int offset);
|
18
|
+
int read_raw_little_endian64(uint64_t *tag, const uint8_t *buffer, int offset);
|
19
|
+
int read_raw_varint32(uint32_t *tag, const uint8_t *buffer, int offset);
|
20
|
+
int read_raw_varint64(uint64_t *tag, const uint8_t *buffer, int offset);
|
21
|
+
|
22
|
+
<% each do |exp| %>
|
23
|
+
<% if exp.kind_of?(Protobuf::Generate::Ast::Enum) %>
|
16
24
|
|
17
25
|
typedef enum {
|
18
26
|
<% exp.fields.each do |field| %>
|
19
|
-
<%=
|
27
|
+
<%= constant exp.package, exp.name, field.name %> = <%= field.tag %>,
|
20
28
|
<% end %>
|
21
|
-
} <%=
|
22
|
-
<%
|
23
|
-
elsif exp.kind_of?(Protobuf::Generate::Ast::Message)
|
24
|
-
%>
|
29
|
+
} <%= type exp.package, exp.name %>;
|
30
|
+
<% elsif exp.kind_of?(Protobuf::Generate::Ast::Message) %>
|
25
31
|
|
26
|
-
typedef struct <%=
|
32
|
+
typedef struct <%= type exp.package, exp.name %> {
|
27
33
|
<% exp.fields.each do |field| %>
|
28
34
|
<% if type_message?(field.type) %>
|
29
|
-
<%=
|
35
|
+
<%= type exp.package, field.type %> <%= field.name %>;
|
30
36
|
<% elsif type_enum?(field.type) %>
|
31
|
-
<%=
|
37
|
+
<%= type exp.package, field.type %> <%= field.name %>;
|
32
38
|
<% elsif field.type =~ /double/ %>
|
33
39
|
double <%= field.name %>;
|
34
40
|
<% elsif field.type =~ /float/ %>
|
@@ -55,16 +61,14 @@
|
|
55
61
|
} <%= field.name %>;
|
56
62
|
<% end %>
|
57
63
|
<% end %>
|
58
|
-
} <%=
|
64
|
+
} <%= type exp.package, exp.name %>;
|
59
65
|
|
60
66
|
// TODO: Replace int with an protobuf_(encode|decode)_t type.
|
61
67
|
// TODO: Move encode_size into result type.
|
62
|
-
int <%=
|
63
|
-
int <%=
|
64
|
-
<%
|
65
|
-
|
66
|
-
end
|
67
|
-
%>
|
68
|
+
int <%= function exp.package, exp.name, 'encode' %>(const <%= type exp.package, exp.name %> *pb, uint8_t *data, size_t data_size, size_t *encoded_size);
|
69
|
+
int <%= function exp.package, exp.name, 'decode' %>(<%= type exp.package, exp.name %> *pb, const uint8_t *data, size_t data_size, size_t *encoded_size);
|
70
|
+
<% end %>
|
71
|
+
<% end %>
|
68
72
|
|
69
73
|
#ifdef __cplusplus
|
70
74
|
}
|
@@ -8,24 +8,14 @@ module Protobuf
|
|
8
8
|
templates Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), 'c', '*.erb'))
|
9
9
|
|
10
10
|
module Conventions
|
11
|
-
def package name = nil
|
12
|
-
@naming_namespace = name.to_s if name
|
13
|
-
(@naming_namespace ||= '').gsub('.', '_')
|
14
|
-
end
|
15
|
-
|
16
11
|
def type *name; snake_case *name, 't' end
|
17
12
|
def variable *name; snake_case *name end
|
18
13
|
def constant *name; snake_case(*name).upcase end
|
19
14
|
def function *name; snake_case *name end
|
20
15
|
|
21
|
-
def namespaced_type *name; type package, *name end
|
22
|
-
def namespaced_variable *name; variable package, *name end
|
23
|
-
def namespaced_constant *name; constant package, *name end
|
24
|
-
def namespaced_function *name; function package, *name end
|
25
|
-
|
26
16
|
protected
|
27
17
|
def snake_case *name
|
28
|
-
name.map(&:to_s).join('_').gsub(/([^A-Z_])([A-Z]+)/, '\1_\2').gsub(/_+/, '_').downcase
|
18
|
+
name.map(&:to_s).join('_').gsub(/([^A-Z_])([A-Z]+)/, '\1_\2').gsub(/[_.]+/, '_').downcase
|
29
19
|
end
|
30
20
|
end # Conventions
|
31
21
|
|
@@ -51,19 +51,33 @@ module Protobuf
|
|
51
51
|
end # Parser
|
52
52
|
|
53
53
|
class Ast
|
54
|
-
class Package < Struct.new(:name)
|
55
|
-
|
54
|
+
class Package < Struct.new(:name)
|
55
|
+
def to_s; name end
|
56
|
+
end
|
57
|
+
class Message < Struct.new(:package, :name, :meta, :fields)
|
58
|
+
def to_s; name end
|
56
59
|
def empty?; fields.nil? or fields.empty? end
|
57
60
|
end
|
58
61
|
class MessageField < Struct.new(:label, :type, :name, :tag, :meta, :options)
|
59
62
|
def required?; !!label.match(/required/) end
|
60
63
|
def optional?; !required? end
|
61
64
|
end
|
62
|
-
class Enum < Struct.new(:name, :fields)
|
65
|
+
class Enum < Struct.new(:package, :name, :fields)
|
66
|
+
def to_s; name end
|
67
|
+
end
|
63
68
|
class EnumField < Struct.new(:name, :tag); end
|
64
69
|
end
|
65
70
|
|
66
71
|
class Transform < Parslet::Transform
|
72
|
+
def apply slice, *args
|
73
|
+
slice = super
|
74
|
+
case slice
|
75
|
+
when Ast::Package then @package = slice
|
76
|
+
when Ast::Message, Ast::Enum then slice.package = @package
|
77
|
+
end
|
78
|
+
slice
|
79
|
+
end
|
80
|
+
|
67
81
|
rule(option: {name: simple(:name), value: simple(:value)}){ [name.to_s, value.to_s] }
|
68
82
|
rule(package: {name: simple(:name)}){ Ast::Package.new(name.to_s) }
|
69
83
|
|
@@ -77,6 +91,7 @@ module Protobuf
|
|
77
91
|
|
78
92
|
rule(message: subtree(:message)) do
|
79
93
|
Ast::Message.new(
|
94
|
+
nil,
|
80
95
|
message[:name].to_s,
|
81
96
|
# TODO: Parslet should return nil not "" when empty. Figure out what's going on.
|
82
97
|
message[:comments].kind_of?(Array) ? Hash[*message[:comments].map{|c| c[:meta]}.flatten.compact] : {},
|
@@ -85,7 +100,7 @@ module Protobuf
|
|
85
100
|
end
|
86
101
|
|
87
102
|
rule(enum_field: {name: simple(:name), tag: simple(:tag)}){ Ast::EnumField.new(name.to_s, tag.to_s) }
|
88
|
-
rule(enum: subtree(:enum)){ Ast::Enum.new(enum[:name].to_s, enum[:fields]) }
|
103
|
+
rule(enum: subtree(:enum)){ Ast::Enum.new(nil, enum[:name].to_s, enum[:fields]) }
|
89
104
|
end # Transform
|
90
105
|
end # Generate
|
91
106
|
end # Protobuf
|
data/protobuf-generate.gemspec
CHANGED
@@ -2,7 +2,7 @@ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |s|
|
4
4
|
s.name = 'protobuf-generate'
|
5
|
-
s.version = '0.0
|
5
|
+
s.version = '0.1.0'
|
6
6
|
s.summary = 'A multi-language concrete protobuf code generator.'
|
7
7
|
s.description = 'A simple PEG parser, AST and template based approach to code generation.'
|
8
8
|
s.authors = ['Shane Hanna']
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf-generate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Hanna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|
@@ -83,4 +83,3 @@ signing_key:
|
|
83
83
|
specification_version: 4
|
84
84
|
summary: A multi-language concrete protobuf code generator.
|
85
85
|
test_files: []
|
86
|
-
has_rdoc:
|