protobuf 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }