protobuf-generate 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|