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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78cf665e01a339bcdf515cee143af388685ef34a
4
- data.tar.gz: 268a8fa0d167f93f8c86ec0f4f9ad304bb4650d2
3
+ metadata.gz: a5a62cd275937980b1b0288c6c4c89ebae992616
4
+ data.tar.gz: 697457604b2bdf9f5f68618925df3091c1d3b137
5
5
  SHA512:
6
- metadata.gz: 30773411e397dbb87a547de33809646493fd3350c83c2fca83c6a2f9e4ed7a64a792780aa626ee60c7febea25d16d973da8550c5a6b4034196f8c46cbdd7c56f
7
- data.tar.gz: ca1613fe95fa0e2a3a02c2616f2b23c19089e7d71a8bc63caed895907a7d6f4d3ba67cdc2f159e411ffb1728e3ccb02eee4b08e154c3ea8087aee45d35855a7c
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
- static int write_raw_little_endian32(uint32_t value, uint8_t *buffer, int offset) {
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
- static int write_raw_little_endian64(uint64_t value, uint8_t *buffer, int offset) {
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
- static int write_raw_varint32(uint32_t value, uint8_t *buffer, int offset) {
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
- static int write_raw_varint64(uint64_t value, uint8_t *buffer, int offset) {
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
- static int read_raw_little_endian32(uint32_t *tag, const uint8_t *buffer, int offset) {
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
- static int read_raw_little_endian64(uint64_t *tag, const uint8_t *buffer, int offset) {
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
- static int read_raw_varint32(uint32_t *tag, const uint8_t *buffer, int offset) {
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
- static int read_raw_varint64(uint64_t *tag, uint8_t *buffer, int offset) {
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
- if exp.kind_of?(Protobuf::Generate::Ast::Package)
194
- package exp.name
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 <%= namespaced_function exp.name, 'init', 'optional', 'attributes' %>(<%= namespaced_type exp.name %> *pb) {
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
- <%= namespaced_function field.type, 'init', 'optional', 'attributes' %>(&pb-><%= field.name %>);
202
+ <%= function exp.package, field.type, 'init', 'optional', 'attributes' %>(&pb-><%= field.name %>);
208
203
  <% elsif type_enum?(field.type) %>
209
- pb-><%= field.name %> = <%= namespaced_constant field.type, type_enum_default(field.type, field.options.fetch('default', nil)) %>;
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 <%= namespaced_function exp.name, 'is', 'default', 'message' %>(const <%= namespaced_type exp.name %> *pb) {
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
- && <%= namespaced_function field.type, 'is', 'default', 'message' %>(&pb-><%= field.name %>)
225
+ && <%= function exp.package, field.type, 'is', 'default', 'message' %>(&pb-><%= field.name %>)
231
226
  <% elsif type_enum?(field.type) %>
232
- && pb-><%= field.name %> == <%= namespaced_constant field.type, type_enum_default(field.type, field.options.fetch('default', nil)) %>
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 <%= namespaced_function exp.name, 'write' %>(const <%= namespaced_type exp.name %> *pb, uint8_t *buffer, int offset) {
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 (!<%= namespaced_function field.type, 'is', 'default', 'message' %>(&pb-><%= field.name %>)) {
247
- offset = <%= namespaced_function field.type, 'write', 'with', 'tag' %>(&pb-><%= field.name %>, buffer, offset, <%= field.tag %>);
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 %> != <%= namespaced_constant field.type, type_enum_default(field.type, field.options.fetch('default', nil)) %>) {
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 = write_raw_varin32(pb-><%= field.name %>, buffer, 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 = <%= namespaced_function field.type, 'write', 'with', 'tag' %>(&pb-><%= field.name %>, buffer, offset, <%= field.tag %>);
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 = write_raw_varin32(pb-><%= field.name %>, buffer, 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 <%= namespaced_function exp.name, 'write', 'delimited', 'to' %>(const <%= namespaced_type exp.name %> *pb, uint8_t *buffer, int offset) {
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 = <%= namespaced_function exp.name, 'write' %>(pb, buffer, 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 <%= namespaced_function exp.name, 'write', 'with', 'tag' %>(const <%= namespaced_type exp.name %> *pb, uint8_t *buffer, int offset, int tag) {
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 = <%= namespaced_function exp.name, 'write', 'delimited', 'to' %>(pb, buffer, offset);
387
+ offset = <%= function exp.package, exp.name, 'write', 'delimited', 'to' %>(pb, buffer, offset);
393
388
  return offset;
394
389
  }
395
390
 
396
- int <%= namespaced_function exp.name, 'encode' %>(const <%= namespaced_type exp.name %> *pb, uint8_t *data, size_t data_size, size_t *encoded_size) {
397
- *encoded_size = <%= namespaced_function exp.name, 'write', 'delimited', 'to' %>(pb, data, -1);
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 <%= namespaced_function exp.name, 'read', 'delimited', 'from' %>(<%= namespaced_type exp.name %> *pb, const uint8_t *buffer, int offset);
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 <%= namespaced_function exp.name, 'read' %>(<%= namespaced_type exp.name %> *pb, const uint8_t *buffer, int offset, int limit) {
404
- <%= namespaced_function exp.name, 'clear' %>(pb);
405
- <%= namespaced_function exp.name, 'init', 'optional', 'attributes' %>(pb);
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 = <%= namespaced_function field.type, 'read', 'delimited', 'from' %>(&pb-><%= field.name %>, buffer, 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 <%= namespaced_function exp.name, 'read', 'delimited', 'from' %>(<%= namespaced_type exp.name %> *pb, const uint8_t *buffer, int offset) {
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
- <%= namespaced_function exp.name, 'read' %>(pb, buffer, offset, size + offset);
488
+ <%= function exp.package, exp.name, 'read' %>(pb, buffer, offset, size + offset);
494
489
  return offset + size;
495
490
  }
496
491
 
497
- int <%= namespaced_function exp.name, 'decode' %>(<%= namespaced_type exp.name %> *pb, const uint8_t *data, size_t data_size, size_t *encoded_size) {
498
- *encoded_size = <%= namespaced_function exp.name, 'read' %>(pb, data, 0, data_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
- each do |exp|
12
- if exp.kind_of?(Protobuf::Generate::Ast::Package)
13
- package exp.name
14
- elsif exp.kind_of?(Protobuf::Generate::Ast::Enum)
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
- <%= namespaced_constant exp.name, field.name %> = <%= field.tag %>,
27
+ <%= constant exp.package, exp.name, field.name %> = <%= field.tag %>,
20
28
  <% end %>
21
- } <%= namespaced_type exp.name %>;
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 <%= namespaced_type exp.name %> {
32
+ typedef struct <%= type exp.package, exp.name %> {
27
33
  <% exp.fields.each do |field| %>
28
34
  <% if type_message?(field.type) %>
29
- <%= namespaced_type field.type %> <%= field.name %>;
35
+ <%= type exp.package, field.type %> <%= field.name %>;
30
36
  <% elsif type_enum?(field.type) %>
31
- <%= namespaced_type field.type %> <%= field.name %>;
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
- } <%= namespaced_type exp.name %>;
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 <%= namespaced_function exp.name, 'encode' %>(const <%= namespaced_type exp.name %> *pb, uint8_t *data, size_t data_size, size_t *encoded_size);
63
- int <%= namespaced_function exp.name, 'decode' %>(<%= namespaced_type exp.name %> *pb, const uint8_t *data, size_t data_size, size_t *encoded_size);
64
- <%
65
- end
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); end
55
- class Message < Struct.new(:name, :meta, :fields)
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); end
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
@@ -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.1'
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.1
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-09 00:00:00.000000000 Z
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: