protobuf 1.0.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.
Files changed (113) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +28 -0
  4. data/README.md +216 -0
  5. data/Rakefile +1 -0
  6. data/bin/rpc_server +117 -0
  7. data/bin/rprotoc +46 -0
  8. data/examples/addressbook.pb.rb +55 -0
  9. data/examples/addressbook.proto +24 -0
  10. data/examples/reading_a_message.rb +32 -0
  11. data/examples/writing_a_message.rb +46 -0
  12. data/lib/protobuf.rb +6 -0
  13. data/lib/protobuf/common/exceptions.rb +11 -0
  14. data/lib/protobuf/common/logger.rb +64 -0
  15. data/lib/protobuf/common/util.rb +59 -0
  16. data/lib/protobuf/common/wire_type.rb +10 -0
  17. data/lib/protobuf/compiler/compiler.rb +52 -0
  18. data/lib/protobuf/compiler/nodes.rb +323 -0
  19. data/lib/protobuf/compiler/proto.y +216 -0
  20. data/lib/protobuf/compiler/proto2.ebnf +79 -0
  21. data/lib/protobuf/compiler/proto_parser.rb +1425 -0
  22. data/lib/protobuf/compiler/template/rpc_bin.erb +4 -0
  23. data/lib/protobuf/compiler/template/rpc_client.erb +18 -0
  24. data/lib/protobuf/compiler/template/rpc_service.erb +25 -0
  25. data/lib/protobuf/compiler/template/rpc_service_implementation.erb +42 -0
  26. data/lib/protobuf/compiler/visitors.rb +302 -0
  27. data/lib/protobuf/descriptor/descriptor.proto +286 -0
  28. data/lib/protobuf/descriptor/descriptor.rb +55 -0
  29. data/lib/protobuf/descriptor/descriptor_builder.rb +143 -0
  30. data/lib/protobuf/descriptor/descriptor_proto.rb +138 -0
  31. data/lib/protobuf/descriptor/enum_descriptor.rb +33 -0
  32. data/lib/protobuf/descriptor/field_descriptor.rb +49 -0
  33. data/lib/protobuf/descriptor/file_descriptor.rb +37 -0
  34. data/lib/protobuf/message/decoder.rb +83 -0
  35. data/lib/protobuf/message/encoder.rb +46 -0
  36. data/lib/protobuf/message/enum.rb +62 -0
  37. data/lib/protobuf/message/extend.rb +8 -0
  38. data/lib/protobuf/message/field.rb +701 -0
  39. data/lib/protobuf/message/message.rb +402 -0
  40. data/lib/protobuf/message/protoable.rb +38 -0
  41. data/lib/protobuf/rpc/buffer.rb +74 -0
  42. data/lib/protobuf/rpc/client.rb +268 -0
  43. data/lib/protobuf/rpc/client_connection.rb +225 -0
  44. data/lib/protobuf/rpc/error.rb +34 -0
  45. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  46. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  47. data/lib/protobuf/rpc/rpc.pb.rb +107 -0
  48. data/lib/protobuf/rpc/server.rb +183 -0
  49. data/lib/protobuf/rpc/service.rb +244 -0
  50. data/lib/protobuf/rpc/stat.rb +70 -0
  51. data/lib/protobuf/version.rb +3 -0
  52. data/proto/rpc.proto +73 -0
  53. data/protobuf.gemspec +25 -0
  54. data/script/mk_parser +2 -0
  55. data/spec/functional/embedded_service_spec.rb +7 -0
  56. data/spec/proto/test.pb.rb +31 -0
  57. data/spec/proto/test.proto +31 -0
  58. data/spec/proto/test_service.rb +30 -0
  59. data/spec/proto/test_service_impl.rb +17 -0
  60. data/spec/spec_helper.rb +26 -0
  61. data/spec/unit/client_spec.rb +128 -0
  62. data/spec/unit/common/logger_spec.rb +121 -0
  63. data/spec/unit/enum_spec.rb +13 -0
  64. data/spec/unit/message_spec.rb +67 -0
  65. data/spec/unit/server_spec.rb +27 -0
  66. data/spec/unit/service_spec.rb +75 -0
  67. data/test/check_unbuild.rb +30 -0
  68. data/test/data/data.bin +3 -0
  69. data/test/data/data_source.py +14 -0
  70. data/test/data/types.bin +0 -0
  71. data/test/data/types_source.py +22 -0
  72. data/test/data/unk.png +0 -0
  73. data/test/proto/addressbook.pb.rb +66 -0
  74. data/test/proto/addressbook.proto +33 -0
  75. data/test/proto/addressbook_base.pb.rb +58 -0
  76. data/test/proto/addressbook_base.proto +26 -0
  77. data/test/proto/addressbook_ext.pb.rb +20 -0
  78. data/test/proto/addressbook_ext.proto +6 -0
  79. data/test/proto/collision.pb.rb +17 -0
  80. data/test/proto/collision.proto +5 -0
  81. data/test/proto/ext_collision.pb.rb +24 -0
  82. data/test/proto/ext_collision.proto +8 -0
  83. data/test/proto/ext_range.pb.rb +22 -0
  84. data/test/proto/ext_range.proto +7 -0
  85. data/test/proto/float_default.proto +10 -0
  86. data/test/proto/lowercase.pb.rb +30 -0
  87. data/test/proto/lowercase.proto +9 -0
  88. data/test/proto/merge.pb.rb +39 -0
  89. data/test/proto/merge.proto +15 -0
  90. data/test/proto/nested.pb.rb +30 -0
  91. data/test/proto/nested.proto +9 -0
  92. data/test/proto/optional_field.pb.rb +35 -0
  93. data/test/proto/optional_field.proto +12 -0
  94. data/test/proto/packed.pb.rb +22 -0
  95. data/test/proto/packed.proto +6 -0
  96. data/test/proto/rpc.proto +6 -0
  97. data/test/proto/types.pb.rb +84 -0
  98. data/test/proto/types.proto +37 -0
  99. data/test/test_addressbook.rb +56 -0
  100. data/test/test_compiler.rb +325 -0
  101. data/test/test_descriptor.rb +122 -0
  102. data/test/test_enum_value.rb +41 -0
  103. data/test/test_extension.rb +36 -0
  104. data/test/test_lowercase.rb +11 -0
  105. data/test/test_message.rb +128 -0
  106. data/test/test_optional_field.rb +103 -0
  107. data/test/test_packed_field.rb +40 -0
  108. data/test/test_parse.rb +15 -0
  109. data/test/test_repeated_types.rb +132 -0
  110. data/test/test_serialize.rb +61 -0
  111. data/test/test_standard_message.rb +96 -0
  112. data/test/test_types.rb +226 -0
  113. metadata +261 -0
@@ -0,0 +1,33 @@
1
+ package tutorial;
2
+
3
+ message Person {
4
+ required string name = 1;
5
+ required int32 id = 2;
6
+ optional string email = 3;
7
+
8
+ enum PhoneType {
9
+ MOBILE = 0;
10
+ HOME = 1;
11
+ WORK = 2;
12
+ }
13
+
14
+ message PhoneNumber {
15
+ required string number = 1;
16
+ optional PhoneType type = 2 [default = HOME];
17
+ }
18
+
19
+ repeated PhoneNumber phone = 4;
20
+ optional uint32 age = 5 [default = 20];
21
+
22
+ extensions 100 to 200;
23
+ }
24
+
25
+ /*
26
+ extend Person {
27
+ optional int32 age = 100;
28
+ }
29
+ */
30
+
31
+ message AddressBook {
32
+ repeated Person person = 1;
33
+ }
@@ -0,0 +1,58 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/addressbook_base.proto>
3
+ # package tutorial_ext;
4
+ #
5
+ # message Person {
6
+ # required string name = 1;
7
+ # required int32 id = 2;
8
+ # optional string email = 3;
9
+ #
10
+ # enum PhoneType {
11
+ # MOBILE = 0;
12
+ # HOME = 1;
13
+ # WORK = 2;
14
+ # }
15
+ #
16
+ # message PhoneNumber {
17
+ # required string number = 1;
18
+ # optional PhoneType type = 2 [default = HOME];
19
+ # }
20
+ #
21
+ # repeated PhoneNumber phone = 4;
22
+ #
23
+ # extensions 100 to 200;
24
+ # }
25
+ #
26
+ # message AddressBook {
27
+ # repeated Person person = 1;
28
+ # }
29
+
30
+ require 'protobuf/message/message'
31
+ require 'protobuf/message/enum'
32
+ require 'protobuf/message/extend'
33
+
34
+ module TutorialExt
35
+ class Person < ::Protobuf::Message
36
+ defined_in __FILE__
37
+ required :string, :name, 1
38
+ required :int32, :id, 2
39
+ optional :string, :email, 3
40
+ class PhoneType < ::Protobuf::Enum
41
+ defined_in __FILE__
42
+ define :MOBILE, 0
43
+ define :HOME, 1
44
+ define :WORK, 2
45
+ end
46
+ class PhoneNumber < ::Protobuf::Message
47
+ defined_in __FILE__
48
+ required :string, :number, 1
49
+ optional :PhoneType, :type, 2, :default => :HOME
50
+ end
51
+ repeated :PhoneNumber, :phone, 4
52
+ extensions 100..200
53
+ end
54
+ class AddressBook < ::Protobuf::Message
55
+ defined_in __FILE__
56
+ repeated :Person, :person, 1
57
+ end
58
+ end
@@ -0,0 +1,26 @@
1
+ package tutorial_ext;
2
+
3
+ message Person {
4
+ required string name = 1;
5
+ required int32 id = 2;
6
+ optional string email = 3;
7
+
8
+ enum PhoneType {
9
+ MOBILE = 0;
10
+ HOME = 1;
11
+ WORK = 2;
12
+ }
13
+
14
+ message PhoneNumber {
15
+ required string number = 1;
16
+ optional PhoneType type = 2 [default = HOME];
17
+ }
18
+
19
+ repeated PhoneNumber phone = 4;
20
+
21
+ extensions 100 to 200;
22
+ }
23
+
24
+ message AddressBook {
25
+ repeated Person person = 1;
26
+ }
@@ -0,0 +1,20 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/addressbook_ext.proto>
3
+ # import "test/proto/addressbook_base.proto";
4
+ # package tutorial_ext;
5
+ #
6
+ # extend Person {
7
+ # optional int32 age = 100;
8
+ # }
9
+
10
+ require 'protobuf/message/message'
11
+ require 'protobuf/message/enum'
12
+ require 'protobuf/message/extend'
13
+
14
+ require 'test/proto/addressbook_base.pb'
15
+ module TutorialExt
16
+ class Person < ::Protobuf::Message
17
+ defined_in __FILE__
18
+ optional :int32, :age, 100, :extension => true
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ import "test/proto/addressbook_base.proto";
2
+ package tutorial_ext;
3
+
4
+ extend Person {
5
+ optional int32 age = 100;
6
+ }
@@ -0,0 +1,17 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/collision.proto>
3
+ # message CollisionTest {
4
+ # optional string a = 1;
5
+ # optional string b = 1;
6
+ # }
7
+ #
8
+
9
+ require 'protobuf/message/message'
10
+ require 'protobuf/message/enum'
11
+ require 'protobuf/message/extend'
12
+
13
+ class CollisionTest < ::Protobuf::Message
14
+ defined_in __FILE__
15
+ optional :string, :a, 1
16
+ optional :string, :b, 1
17
+ end
@@ -0,0 +1,5 @@
1
+ message CollisionTest {
2
+ optional string a = 1;
3
+ optional string b = 1;
4
+ }
5
+
@@ -0,0 +1,24 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/ext_collision.proto>
3
+ # message ExtCollisionTest {
4
+ # extensions 1 to 10;
5
+ # }
6
+ #
7
+ # message ExtCollisionTest {
8
+ # optional string a = 1;
9
+ # optional string b = 1;
10
+ # }
11
+
12
+ require 'protobuf/message/message'
13
+ require 'protobuf/message/enum'
14
+ require 'protobuf/message/extend'
15
+
16
+ class ExtCollisionTest < ::Protobuf::Message
17
+ defined_in __FILE__
18
+ extensions 1..10
19
+ end
20
+ class ExtCollisionTest < ::Protobuf::Message
21
+ defined_in __FILE__
22
+ optional :string, :a, 1
23
+ optional :string, :b, 1
24
+ end
@@ -0,0 +1,8 @@
1
+ message ExtCollisionTest {
2
+ extensions 1 to 10;
3
+ }
4
+
5
+ message ExtCollisionTest {
6
+ optional string a = 1;
7
+ optional string b = 1;
8
+ }
@@ -0,0 +1,22 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/ext_range.proto>
3
+ # message ExtRangeTest {
4
+ # extensions 1 to 10;
5
+ # }
6
+ #
7
+ # extend ExtRangeTest {
8
+ # optional string a = 11;
9
+ # }
10
+
11
+ require 'protobuf/message/message'
12
+ require 'protobuf/message/enum'
13
+ require 'protobuf/message/extend'
14
+
15
+ class ExtRangeTest < ::Protobuf::Message
16
+ defined_in __FILE__
17
+ extensions 1..10
18
+ end
19
+ class ExtRangeTest < ::Protobuf::Message
20
+ defined_in __FILE__
21
+ optional :string, :a, 11, :extension => true
22
+ end
@@ -0,0 +1,7 @@
1
+ message ExtRangeTest {
2
+ extensions 1 to 10;
3
+ }
4
+
5
+ extend ExtRangeTest {
6
+ optional string a = 11;
7
+ }
@@ -0,0 +1,10 @@
1
+ message M {
2
+ optional float f = 1 [default = 4.2];
3
+ optional float g = 2 [default = -4.2];
4
+ optional float h = 3 [default = 4352];
5
+ optional float i = 4 [default = 23145.2 ];
6
+ optional float j = 5 [default = -5 ];
7
+ optional float k = 6 [default = +23 ];
8
+ optional float l = 7 [default = +23.42 ];
9
+ }
10
+
@@ -0,0 +1,30 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/lowercase.proto>
3
+ # package test.lowercase;
4
+ #
5
+ # message foo {
6
+ # message bar {
7
+ # }
8
+ # }
9
+ # message baaz {
10
+ # required foo.bar x = 1;
11
+ # }
12
+
13
+ require 'protobuf/message/message'
14
+ require 'protobuf/message/enum'
15
+ require 'protobuf/message/extend'
16
+
17
+ module Test
18
+ module Lowercase
19
+ class Foo < ::Protobuf::Message
20
+ defined_in __FILE__
21
+ class Bar < ::Protobuf::Message
22
+ defined_in __FILE__
23
+ end
24
+ end
25
+ class Baaz < ::Protobuf::Message
26
+ defined_in __FILE__
27
+ required :'foo::bar', :x, 1
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ package test.lowercase;
2
+
3
+ message foo {
4
+ message bar {
5
+ }
6
+ }
7
+ message baaz {
8
+ required foo.bar x = 1;
9
+ }
@@ -0,0 +1,39 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/merge.proto>
3
+ # package test;
4
+ #
5
+ # message MergeMessage {
6
+ # message InnerMessage1 {
7
+ # required string name = 1;
8
+ # }
9
+ # message InnerMessage2 {
10
+ # required string name = 1;
11
+ # repeated InnerMessage1 repeate_message = 2;
12
+ # }
13
+ #
14
+ # required string name = 1;
15
+ # repeated InnerMessage1 repeate_message = 2;
16
+ # required InnerMessage2 require_message = 3;
17
+ # }
18
+
19
+ require 'protobuf/message/message'
20
+ require 'protobuf/message/enum'
21
+ require 'protobuf/message/extend'
22
+
23
+ module Test
24
+ class MergeMessage < ::Protobuf::Message
25
+ defined_in __FILE__
26
+ class InnerMessage1 < ::Protobuf::Message
27
+ defined_in __FILE__
28
+ required :string, :name, 1
29
+ end
30
+ class InnerMessage2 < ::Protobuf::Message
31
+ defined_in __FILE__
32
+ required :string, :name, 1
33
+ repeated :InnerMessage1, :repeate_message, 2
34
+ end
35
+ required :string, :name, 1
36
+ repeated :InnerMessage1, :repeate_message, 2
37
+ required :InnerMessage2, :require_message, 3
38
+ end
39
+ end
@@ -0,0 +1,15 @@
1
+ package test;
2
+
3
+ message MergeMessage {
4
+ message InnerMessage1 {
5
+ required string name = 1;
6
+ }
7
+ message InnerMessage2 {
8
+ required string name = 1;
9
+ repeated InnerMessage1 repeate_message = 2;
10
+ }
11
+
12
+ required string name = 1;
13
+ repeated InnerMessage1 repeate_message = 2;
14
+ required InnerMessage2 require_message = 3;
15
+ }
@@ -0,0 +1,30 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/nested.proto>
3
+ # package test.nested;
4
+ #
5
+ # message Foo {
6
+ # message Bar {
7
+ # }
8
+ # }
9
+ # message Baaz {
10
+ # optional Foo.Bar x = 1;
11
+ # }
12
+
13
+ require 'protobuf/message/message'
14
+ require 'protobuf/message/enum'
15
+ require 'protobuf/message/extend'
16
+
17
+ module Test
18
+ module Nested
19
+ class Foo < ::Protobuf::Message
20
+ defined_in __FILE__
21
+ class Bar < ::Protobuf::Message
22
+ defined_in __FILE__
23
+ end
24
+ end
25
+ class Baaz < ::Protobuf::Message
26
+ defined_in __FILE__
27
+ optional :'Foo::Bar', :x, 1
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ package test.nested;
2
+
3
+ message Foo {
4
+ message Bar {
5
+ }
6
+ }
7
+ message Baaz {
8
+ optional Foo.Bar x = 1;
9
+ }
@@ -0,0 +1,35 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/optional_field.proto>
3
+ # package test.optional_field;
4
+ #
5
+ # message Message {
6
+ # enum Enum {
7
+ # A = 1;
8
+ # B = 2;
9
+ # }
10
+ # optional uint32 number = 1 [default = 20];
11
+ # optional string text = 2 [default = "default string"];
12
+ # optional Enum enum = 3 [default = B];
13
+ # optional int32 signed = 4 [default = -100];
14
+ # }
15
+
16
+ require 'protobuf/message/message'
17
+ require 'protobuf/message/enum'
18
+ require 'protobuf/message/extend'
19
+
20
+ module Test
21
+ module OptionalField
22
+ class Message < ::Protobuf::Message
23
+ defined_in __FILE__
24
+ class Enum < ::Protobuf::Enum
25
+ defined_in __FILE__
26
+ define :A, 1
27
+ define :B, 2
28
+ end
29
+ optional :uint32, :number, 1, :default => 20
30
+ optional :string, :text, 2, :default => "default string"
31
+ optional :Enum, :enum, 3, :default => :B
32
+ optional :int32, :signed, 4, :default => -100
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ package test.optional_field;
2
+
3
+ message Message {
4
+ enum Enum {
5
+ A = 1;
6
+ B = 2;
7
+ }
8
+ optional uint32 number = 1 [default = 20];
9
+ optional string text = 2 [default = "default string"];
10
+ optional Enum enum = 3 [default = B];
11
+ optional int32 signed = 4 [default = -100];
12
+ }