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.
- data/.gitignore +5 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +28 -0
- data/README.md +216 -0
- data/Rakefile +1 -0
- data/bin/rpc_server +117 -0
- data/bin/rprotoc +46 -0
- data/examples/addressbook.pb.rb +55 -0
- data/examples/addressbook.proto +24 -0
- data/examples/reading_a_message.rb +32 -0
- data/examples/writing_a_message.rb +46 -0
- data/lib/protobuf.rb +6 -0
- data/lib/protobuf/common/exceptions.rb +11 -0
- data/lib/protobuf/common/logger.rb +64 -0
- data/lib/protobuf/common/util.rb +59 -0
- data/lib/protobuf/common/wire_type.rb +10 -0
- data/lib/protobuf/compiler/compiler.rb +52 -0
- data/lib/protobuf/compiler/nodes.rb +323 -0
- data/lib/protobuf/compiler/proto.y +216 -0
- data/lib/protobuf/compiler/proto2.ebnf +79 -0
- data/lib/protobuf/compiler/proto_parser.rb +1425 -0
- data/lib/protobuf/compiler/template/rpc_bin.erb +4 -0
- data/lib/protobuf/compiler/template/rpc_client.erb +18 -0
- data/lib/protobuf/compiler/template/rpc_service.erb +25 -0
- data/lib/protobuf/compiler/template/rpc_service_implementation.erb +42 -0
- data/lib/protobuf/compiler/visitors.rb +302 -0
- data/lib/protobuf/descriptor/descriptor.proto +286 -0
- data/lib/protobuf/descriptor/descriptor.rb +55 -0
- data/lib/protobuf/descriptor/descriptor_builder.rb +143 -0
- data/lib/protobuf/descriptor/descriptor_proto.rb +138 -0
- data/lib/protobuf/descriptor/enum_descriptor.rb +33 -0
- data/lib/protobuf/descriptor/field_descriptor.rb +49 -0
- data/lib/protobuf/descriptor/file_descriptor.rb +37 -0
- data/lib/protobuf/message/decoder.rb +83 -0
- data/lib/protobuf/message/encoder.rb +46 -0
- data/lib/protobuf/message/enum.rb +62 -0
- data/lib/protobuf/message/extend.rb +8 -0
- data/lib/protobuf/message/field.rb +701 -0
- data/lib/protobuf/message/message.rb +402 -0
- data/lib/protobuf/message/protoable.rb +38 -0
- data/lib/protobuf/rpc/buffer.rb +74 -0
- data/lib/protobuf/rpc/client.rb +268 -0
- data/lib/protobuf/rpc/client_connection.rb +225 -0
- data/lib/protobuf/rpc/error.rb +34 -0
- data/lib/protobuf/rpc/error/client_error.rb +31 -0
- data/lib/protobuf/rpc/error/server_error.rb +43 -0
- data/lib/protobuf/rpc/rpc.pb.rb +107 -0
- data/lib/protobuf/rpc/server.rb +183 -0
- data/lib/protobuf/rpc/service.rb +244 -0
- data/lib/protobuf/rpc/stat.rb +70 -0
- data/lib/protobuf/version.rb +3 -0
- data/proto/rpc.proto +73 -0
- data/protobuf.gemspec +25 -0
- data/script/mk_parser +2 -0
- data/spec/functional/embedded_service_spec.rb +7 -0
- data/spec/proto/test.pb.rb +31 -0
- data/spec/proto/test.proto +31 -0
- data/spec/proto/test_service.rb +30 -0
- data/spec/proto/test_service_impl.rb +17 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/unit/client_spec.rb +128 -0
- data/spec/unit/common/logger_spec.rb +121 -0
- data/spec/unit/enum_spec.rb +13 -0
- data/spec/unit/message_spec.rb +67 -0
- data/spec/unit/server_spec.rb +27 -0
- data/spec/unit/service_spec.rb +75 -0
- data/test/check_unbuild.rb +30 -0
- data/test/data/data.bin +3 -0
- data/test/data/data_source.py +14 -0
- data/test/data/types.bin +0 -0
- data/test/data/types_source.py +22 -0
- data/test/data/unk.png +0 -0
- data/test/proto/addressbook.pb.rb +66 -0
- data/test/proto/addressbook.proto +33 -0
- data/test/proto/addressbook_base.pb.rb +58 -0
- data/test/proto/addressbook_base.proto +26 -0
- data/test/proto/addressbook_ext.pb.rb +20 -0
- data/test/proto/addressbook_ext.proto +6 -0
- data/test/proto/collision.pb.rb +17 -0
- data/test/proto/collision.proto +5 -0
- data/test/proto/ext_collision.pb.rb +24 -0
- data/test/proto/ext_collision.proto +8 -0
- data/test/proto/ext_range.pb.rb +22 -0
- data/test/proto/ext_range.proto +7 -0
- data/test/proto/float_default.proto +10 -0
- data/test/proto/lowercase.pb.rb +30 -0
- data/test/proto/lowercase.proto +9 -0
- data/test/proto/merge.pb.rb +39 -0
- data/test/proto/merge.proto +15 -0
- data/test/proto/nested.pb.rb +30 -0
- data/test/proto/nested.proto +9 -0
- data/test/proto/optional_field.pb.rb +35 -0
- data/test/proto/optional_field.proto +12 -0
- data/test/proto/packed.pb.rb +22 -0
- data/test/proto/packed.proto +6 -0
- data/test/proto/rpc.proto +6 -0
- data/test/proto/types.pb.rb +84 -0
- data/test/proto/types.proto +37 -0
- data/test/test_addressbook.rb +56 -0
- data/test/test_compiler.rb +325 -0
- data/test/test_descriptor.rb +122 -0
- data/test/test_enum_value.rb +41 -0
- data/test/test_extension.rb +36 -0
- data/test/test_lowercase.rb +11 -0
- data/test/test_message.rb +128 -0
- data/test/test_optional_field.rb +103 -0
- data/test/test_packed_field.rb +40 -0
- data/test/test_parse.rb +15 -0
- data/test/test_repeated_types.rb +132 -0
- data/test/test_serialize.rb +61 -0
- data/test/test_standard_message.rb +96 -0
- data/test/test_types.rb +226 -0
- 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,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,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,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,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,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,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
|
+
}
|