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