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 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: