protobuf 3.7.5 → 3.8.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/protobuf/field/base_field.rb +18 -0
- data/lib/protobuf/field/field_hash.rb +104 -0
- data/lib/protobuf/generators/field_generator.rb +53 -10
- data/lib/protobuf/generators/group_generator.rb +7 -3
- data/lib/protobuf/generators/message_generator.rb +1 -1
- data/lib/protobuf/message.rb +30 -3
- data/lib/protobuf/message/fields.rb +13 -0
- data/lib/protobuf/version.rb +1 -1
- data/spec/functional/code_generator_spec.rb +20 -0
- data/spec/lib/protobuf/field/field_array_spec.rb +48 -12
- data/spec/lib/protobuf/field/field_hash_spec.rb +168 -0
- data/spec/lib/protobuf/generators/extension_generator_spec.rb +3 -3
- data/spec/lib/protobuf/generators/field_generator_spec.rb +53 -16
- data/spec/lib/protobuf/message_spec.rb +37 -0
- data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +1 -1
- data/spec/support/protos/map-test.bin +157 -0
- data/spec/support/protos/map-test.pb.rb +85 -0
- data/spec/support/protos/map-test.proto +68 -0
- metadata +99 -6
@@ -0,0 +1,168 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Protobuf::Field::FieldHash do
|
4
|
+
|
5
|
+
let(:basic_message) do
|
6
|
+
Class.new(::Protobuf::Message) do
|
7
|
+
optional :string, :field, 1
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:more_complex_message) do
|
12
|
+
Class.new(BasicMessage) do
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:some_enum) do
|
17
|
+
Class.new(::Protobuf::Enum) do
|
18
|
+
define :FOO, 1
|
19
|
+
define :BAR, 2
|
20
|
+
define :BAZ, 3
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:map_message) do
|
25
|
+
Class.new(::Protobuf::Message) do
|
26
|
+
optional :string, :some_string, 1
|
27
|
+
map :int32, :string, :map_int32_to_string, 2
|
28
|
+
map :string, BasicMessage, :map_string_to_msg, 3
|
29
|
+
map :string, SomeEnum, :map_string_to_enum, 4
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
before do
|
34
|
+
stub_const('BasicMessage', basic_message)
|
35
|
+
stub_const('MoreComplexMessage', more_complex_message)
|
36
|
+
stub_const('SomeEnum', some_enum)
|
37
|
+
stub_const('SomeMapMessage', map_message)
|
38
|
+
end
|
39
|
+
|
40
|
+
let(:instance) { SomeMapMessage.new }
|
41
|
+
|
42
|
+
%w([]= store).each do |method|
|
43
|
+
describe "##{method}" do
|
44
|
+
context 'when applied to an int32->string field hash' do
|
45
|
+
it 'adds an int -> string entry' do
|
46
|
+
expect(instance.map_int32_to_string).to be_empty
|
47
|
+
instance.map_int32_to_string.send(method, 1, 'string 1')
|
48
|
+
expect(instance.map_int32_to_string).to eq(1 => 'string 1')
|
49
|
+
instance.map_int32_to_string.send(method, 2, 'string 2')
|
50
|
+
expect(instance.map_int32_to_string).to eq(1 => 'string 1', 2 => 'string 2')
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'fails if not adding an int -> string' do
|
54
|
+
expect { instance.map_int32_to_string.send(method, 1, 100.0) }.to raise_error(TypeError)
|
55
|
+
expect { instance.map_int32_to_string.send(method, 'foo', 100.0) }.to raise_error(TypeError)
|
56
|
+
expect { instance.map_int32_to_string.send(method, BasicMessage.new, 100.0) }.to raise_error(TypeError)
|
57
|
+
expect { instance.map_int32_to_string.send(method, 'foo', 'bar') }.to raise_error(TypeError)
|
58
|
+
expect { instance.map_int32_to_string.send(method, nil, 'foo') }.to raise_error(TypeError)
|
59
|
+
expect { instance.map_int32_to_string.send(method, 1, nil) }.to raise_error(TypeError)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when applied to a string->MessageField field hash' do
|
64
|
+
it 'adds a string -> MessageField entry' do
|
65
|
+
expect(instance.map_string_to_msg).to be_empty
|
66
|
+
basic_msg1 = BasicMessage.new
|
67
|
+
instance.map_string_to_msg.send(method, 'msg1', basic_msg1)
|
68
|
+
expect(instance.map_string_to_msg).to eq('msg1' => basic_msg1)
|
69
|
+
basic_msg2 = BasicMessage.new
|
70
|
+
instance.map_string_to_msg.send(method, 'msg2', basic_msg2)
|
71
|
+
expect(instance.map_string_to_msg).to eq('msg1' => basic_msg1, 'msg2' => basic_msg2)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'fails if not adding a string -> MessageField entry' do
|
75
|
+
expect { instance.map_string_to_msg.send(method, 1, 100.0) }.to raise_error(TypeError)
|
76
|
+
expect { instance.map_string_to_msg.send(method, 'foo', SomeEnum::FOO) }.to raise_error(TypeError)
|
77
|
+
expect { instance.map_string_to_msg.send(method, SomeEnum::FOO, BasicMessage.new) }.to raise_error(TypeError)
|
78
|
+
expect { instance.map_string_to_msg.send(method, nil, BasicMessage.new) }.to raise_error(TypeError)
|
79
|
+
expect { instance.map_string_to_msg.send(method, 'foo', nil) }.to raise_error(TypeError)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'adds a Hash from a MessageField object' do
|
83
|
+
expect(instance.map_string_to_msg).to be_empty
|
84
|
+
basic_msg1 = BasicMessage.new
|
85
|
+
basic_msg1.field = 'my value'
|
86
|
+
instance.map_string_to_msg.send(method, 'foo', basic_msg1.to_hash)
|
87
|
+
expect(instance.map_string_to_msg).to eq('foo' => basic_msg1)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'does not downcast a MessageField' do
|
91
|
+
expect(instance.map_string_to_msg).to be_empty
|
92
|
+
basic_msg1 = MoreComplexMessage.new
|
93
|
+
instance.map_string_to_msg.send(method, 'foo', basic_msg1)
|
94
|
+
expect(instance.map_string_to_msg).to eq('foo' => basic_msg1)
|
95
|
+
expect(instance.map_string_to_msg['foo']).to be_a(MoreComplexMessage)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'when applied to a string->EnumField field hash' do
|
100
|
+
it 'adds a string -> EnumField entry' do
|
101
|
+
expect(instance.map_string_to_enum).to be_empty
|
102
|
+
instance.map_string_to_enum.send(method, 'msg1', SomeEnum::FOO)
|
103
|
+
expect(instance.map_string_to_enum).to eq('msg1' => SomeEnum::FOO)
|
104
|
+
instance.map_string_to_enum.send(method, 'msg2', SomeEnum::BAR)
|
105
|
+
expect(instance.map_string_to_enum).to eq('msg1' => SomeEnum::FOO, 'msg2' => SomeEnum::BAR)
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'fails if not adding a string -> EnumField entry' do
|
109
|
+
expect { instance.map_string_to_enum.send(method, 1, 100.0) }.to raise_error(TypeError)
|
110
|
+
expect { instance.map_string_to_enum.send(method, nil, 100.0) }.to raise_error(TypeError)
|
111
|
+
expect { instance.map_string_to_enum.send(method, 1, nil) }.to raise_error(TypeError)
|
112
|
+
expect { instance.map_string_to_enum.send(method, 'foo', BasicMessage.new) }.to raise_error(TypeError)
|
113
|
+
expect { instance.map_string_to_enum.send(method, 1, SomeEnum::FOO) }.to raise_error(TypeError)
|
114
|
+
expect { instance.map_string_to_enum.send(method, nil, SomeEnum::FOO) }.to raise_error(TypeError)
|
115
|
+
expect { instance.map_string_to_enum.send(method, 'foo', nil) }.to raise_error(TypeError)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe '#to_hash_value' do
|
121
|
+
context 'when applied to an int32->string field hash' do
|
122
|
+
before do
|
123
|
+
instance.map_int32_to_string[1] = 'string 1'
|
124
|
+
instance.map_int32_to_string[2] = 'string 2'
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'converts properly' do
|
128
|
+
expect(instance.to_hash_value).to eq(:map_int32_to_string => {
|
129
|
+
1 => 'string 1',
|
130
|
+
2 => 'string 2',
|
131
|
+
})
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'when applied to a string->MessageField field hash' do
|
136
|
+
before do
|
137
|
+
instance.map_string_to_msg['msg1'] = BasicMessage.new(:field => 'string 1')
|
138
|
+
instance.map_string_to_msg['msg2'] = BasicMessage.new(:field => 'string 2')
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'converts properly' do
|
142
|
+
expect(instance.to_hash_value).to eq(:map_string_to_msg => {
|
143
|
+
'msg1' => {
|
144
|
+
:field => 'string 1',
|
145
|
+
},
|
146
|
+
'msg2' => {
|
147
|
+
:field => 'string 2',
|
148
|
+
},
|
149
|
+
})
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
context 'when applied to a string->EnumField field hash' do
|
154
|
+
before do
|
155
|
+
instance.map_string_to_enum['msg1'] = SomeEnum::FOO
|
156
|
+
instance.map_string_to_enum['msg2'] = SomeEnum::BAR
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'converts properly' do
|
160
|
+
expect(instance.to_hash_value).to eq(:map_string_to_enum => {
|
161
|
+
'msg1' => 1,
|
162
|
+
'msg2' => 2,
|
163
|
+
})
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -15,9 +15,9 @@ RSpec.describe ::Protobuf::Generators::ExtensionGenerator do
|
|
15
15
|
let(:message_type) { 'FooBar' }
|
16
16
|
|
17
17
|
before do
|
18
|
-
expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[0], 1).and_return(field_descriptors[0])
|
19
|
-
expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[1], 1).and_return(field_descriptors[1])
|
20
|
-
expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[2], 1).and_return(field_descriptors[2])
|
18
|
+
expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[0], nil, 1).and_return(field_descriptors[0])
|
19
|
+
expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[1], nil, 1).and_return(field_descriptors[1])
|
20
|
+
expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[2], nil, 1).and_return(field_descriptors[2])
|
21
21
|
end
|
22
22
|
|
23
23
|
subject { described_class.new(message_type, field_descriptors, 0) }
|
@@ -25,32 +25,41 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
|
|
25
25
|
:options => field_options,
|
26
26
|
}
|
27
27
|
end
|
28
|
-
|
29
28
|
let(:field) { ::Google::Protobuf::FieldDescriptorProto.new(field_fields) }
|
30
29
|
|
30
|
+
let(:nested_types) { [] }
|
31
|
+
let(:owner_fields) do
|
32
|
+
{
|
33
|
+
:name => 'Baz',
|
34
|
+
:field => [field],
|
35
|
+
:nested_type => nested_types,
|
36
|
+
}
|
37
|
+
end
|
38
|
+
let(:owner_msg) { ::Google::Protobuf::DescriptorProto.new(owner_fields) }
|
39
|
+
|
31
40
|
describe '#compile' do
|
32
|
-
subject { described_class.new(field).to_s }
|
41
|
+
subject { described_class.new(field, owner_msg, 1).to_s }
|
33
42
|
|
34
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3\n" }
|
43
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3\n" }
|
35
44
|
|
36
45
|
context 'when the type is another message' do
|
37
46
|
let(:type_enum) { :TYPE_MESSAGE }
|
38
47
|
let(:type_name) { '.foo.bar.Baz' }
|
39
48
|
|
40
|
-
specify { expect(subject).to eq "optional ::Foo::Bar::Baz, :foo_bar, 3\n" }
|
49
|
+
specify { expect(subject).to eq " optional ::Foo::Bar::Baz, :foo_bar, 3\n" }
|
41
50
|
end
|
42
51
|
|
43
52
|
context 'when a default value is used' do
|
44
53
|
let(:type_enum) { :TYPE_INT32 }
|
45
54
|
let(:default_value) { '42' }
|
46
|
-
specify { expect(subject).to eq "optional :int32, :foo_bar, 3, :default => 42\n" }
|
55
|
+
specify { expect(subject).to eq " optional :int32, :foo_bar, 3, :default => 42\n" }
|
47
56
|
|
48
57
|
context 'when type is an enum' do
|
49
58
|
let(:type_enum) { :TYPE_ENUM }
|
50
59
|
let(:type_name) { '.foo.bar.Baz' }
|
51
60
|
let(:default_value) { 'QUUX' }
|
52
61
|
|
53
|
-
specify { expect(subject).to eq "optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
|
62
|
+
specify { expect(subject).to eq " optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
|
54
63
|
end
|
55
64
|
|
56
65
|
context 'when type is an enum with lowercase default value with PB_UPCASE_ENUMS set' do
|
@@ -59,14 +68,14 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
|
|
59
68
|
let(:default_value) { 'quux' }
|
60
69
|
before { allow(ENV).to receive(:key?).with('PB_UPCASE_ENUMS').and_return(true) }
|
61
70
|
|
62
|
-
specify { expect(subject).to eq "optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
|
71
|
+
specify { expect(subject).to eq " optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
|
63
72
|
end
|
64
73
|
|
65
74
|
context 'when the type is a string' do
|
66
75
|
let(:type_enum) { :TYPE_STRING }
|
67
76
|
let(:default_value) { "a default \"string\"" }
|
68
77
|
|
69
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :default => \"a default \"string\"\"\n" }
|
78
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :default => \"a default \"string\"\"\n" }
|
70
79
|
end
|
71
80
|
|
72
81
|
context 'when float or double field type' do
|
@@ -92,19 +101,47 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
|
|
92
101
|
context 'when the field is an extension' do
|
93
102
|
let(:extendee) { 'foo.bar.Baz' }
|
94
103
|
|
95
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :extension => true\n" }
|
104
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :extension => true\n" }
|
96
105
|
end
|
97
106
|
|
98
107
|
context 'when field is packed' do
|
99
108
|
let(:field_options) { { :packed => true } }
|
100
109
|
|
101
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :packed => true\n" }
|
110
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :packed => true\n" }
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'when field is a map' do
|
114
|
+
let(:type_enum) { :TYPE_MESSAGE }
|
115
|
+
let(:type_name) { '.foo.bar.Baz.FooBarEntry' }
|
116
|
+
let(:label_enum) { :LABEL_REPEATED }
|
117
|
+
let(:nested_types) do
|
118
|
+
[::Google::Protobuf::DescriptorProto.new(
|
119
|
+
:name => 'FooBarEntry',
|
120
|
+
:field => [
|
121
|
+
::Google::Protobuf::FieldDescriptorProto.new(
|
122
|
+
:label => :LABEL_OPTIONAL,
|
123
|
+
:name => 'key',
|
124
|
+
:number => 1,
|
125
|
+
:type => :TYPE_STRING,
|
126
|
+
:type_name => nil),
|
127
|
+
::Google::Protobuf::FieldDescriptorProto.new(
|
128
|
+
:label => :LABEL_OPTIONAL,
|
129
|
+
:name => 'value',
|
130
|
+
:number => 2,
|
131
|
+
:type => :TYPE_ENUM,
|
132
|
+
:type_name => '.foo.bar.SnafuState'),
|
133
|
+
],
|
134
|
+
:options => ::Google::Protobuf::MessageOptions.new(:map_entry => true)),
|
135
|
+
]
|
136
|
+
end
|
137
|
+
|
138
|
+
specify { expect(subject).to eq " map :string, ::Foo::Bar::SnafuState, :foo_bar, 3\n" }
|
102
139
|
end
|
103
140
|
|
104
141
|
context 'when field is deprecated' do
|
105
142
|
let(:field_options) { { :deprecated => true } }
|
106
143
|
|
107
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :deprecated => true\n" }
|
144
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :deprecated => true\n" }
|
108
145
|
end
|
109
146
|
|
110
147
|
context 'when field uses a custom option that is an extension' do
|
@@ -128,31 +165,31 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
|
|
128
165
|
describe 'option has a string value' do
|
129
166
|
let(:field_options) { { :custom_string_option => 'boom' } }
|
130
167
|
|
131
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_string_option => \"boom\"\n" }
|
168
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_string_option => \"boom\"\n" }
|
132
169
|
end
|
133
170
|
|
134
171
|
describe 'option has a bool value' do
|
135
172
|
let(:field_options) { { :custom_bool_option => true } }
|
136
173
|
|
137
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_bool_option => true\n" }
|
174
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_bool_option => true\n" }
|
138
175
|
end
|
139
176
|
|
140
177
|
describe 'option has a int32 value' do
|
141
178
|
let(:field_options) { { :custom_int32_option => 123 } }
|
142
179
|
|
143
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_int32_option => 123\n" }
|
180
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_int32_option => 123\n" }
|
144
181
|
end
|
145
182
|
|
146
183
|
describe 'option has a message value' do
|
147
184
|
let(:field_options) { { :custom_message_option => CustomFieldMessage.new(:foo => 'boom') } }
|
148
185
|
|
149
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_message_option => { :foo => \"boom\" }\n" }
|
186
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_message_option => { :foo => \"boom\" }\n" }
|
150
187
|
end
|
151
188
|
|
152
189
|
describe 'option has a enum value' do
|
153
190
|
let(:field_options) { { :custom_enum_option => CustomFieldEnum::BAM } }
|
154
191
|
|
155
|
-
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_enum_option => ::CustomFieldEnum::BAM\n" }
|
192
|
+
specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_enum_option => ::CustomFieldEnum::BAM\n" }
|
156
193
|
end
|
157
194
|
end
|
158
195
|
end
|
@@ -715,6 +715,43 @@ RSpec.describe Protobuf::Message do
|
|
715
715
|
end
|
716
716
|
end
|
717
717
|
|
718
|
+
describe 'map fields' do
|
719
|
+
it 'serializes the same as equivalent non-map-field' do
|
720
|
+
class MessageWithMapField < ::Protobuf::Message
|
721
|
+
map :int32, :string, :map, 1
|
722
|
+
end
|
723
|
+
|
724
|
+
class MessageWithoutMapField < ::Protobuf::Message
|
725
|
+
class MapEntry < ::Protobuf::Message
|
726
|
+
optional :int32, :key, 1
|
727
|
+
optional :string, :value, 2
|
728
|
+
end
|
729
|
+
repeated MapEntry, :map, 1
|
730
|
+
end
|
731
|
+
|
732
|
+
map_msg = MessageWithMapField.new(:map =>
|
733
|
+
{
|
734
|
+
1 => 'one',
|
735
|
+
2 => 'two',
|
736
|
+
3 => 'three',
|
737
|
+
4 => 'four',
|
738
|
+
})
|
739
|
+
mapless_msg = MessageWithoutMapField.new(:map =>
|
740
|
+
[{ :key => 1, :value => 'one' },
|
741
|
+
{ :key => 2, :value => 'two' },
|
742
|
+
{ :key => 3, :value => 'three' },
|
743
|
+
{ :key => 4, :value => 'four' },
|
744
|
+
])
|
745
|
+
|
746
|
+
map_bytes = map_msg.encode
|
747
|
+
mapless_bytes = mapless_msg.encode
|
748
|
+
expect(map_bytes).to eq(mapless_bytes)
|
749
|
+
|
750
|
+
expect(MessageWithMapField.decode(mapless_bytes)).to eq(map_msg)
|
751
|
+
expect(MessageWithoutMapField.decode(map_bytes)).to eq(mapless_msg)
|
752
|
+
end
|
753
|
+
end
|
754
|
+
|
718
755
|
describe '.[]=' do
|
719
756
|
context 'clearing fields' do
|
720
757
|
it 'clears repeated fields with an empty array' do
|
@@ -86,7 +86,7 @@ RSpec.describe Protobuf::Rpc::Middleware::RequestDecoder do
|
|
86
86
|
let(:request_wrapper) do
|
87
87
|
::Protobuf::Socketrpc::Request.new(
|
88
88
|
:caller => client_host,
|
89
|
-
:service_name => '
|
89
|
+
:service_name => 'NonexistantService',
|
90
90
|
:method_name => method_name.to_s,
|
91
91
|
:request_proto => request,
|
92
92
|
)
|
@@ -0,0 +1,157 @@
|
|
1
|
+
|
2
|
+
�!
|
3
|
+
map-test.protofoo"�
|
4
|
+
Baz2
|
5
|
+
looks_like_map (2.foo.Baz.LooksLikeMapEntry@
|
6
|
+
does_not_look_like_map (2 .foo.Baz.DoesNotLookLikeMapEntry3
|
7
|
+
LooksLikeMapEntry
|
8
|
+
key (
|
9
|
+
value ( :85
|
10
|
+
DoesNotLookLikeMapEntry
|
11
|
+
key (
|
12
|
+
value ( "�
|
13
|
+
Bar0
|
14
|
+
|
15
|
+
|
16
|
+
int32_to_baz (2.foo.Bar.Int32ToBazEntry.
|
17
|
+
int64_to_baz (2.foo.Bar.Int64ToBazEntry0
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
sint32_to_frobnitz (2.foo.Bar.Sint32ToFrobnitzEntry:
|
22
|
+
sint64_to_frobnitz (2.foo.Bar.Sint64ToFrobnitzEntry8
|
23
|
+
int32_to_frobnitz
|
24
|
+
(2.foo.Bar.Int32ToFrobnitzEntry8
|
25
|
+
int64_to_frobnitz (2.foo.Bar.Int64ToFrobnitzEntry:
|
26
|
+
uint32_to_frobnitz (2.foo.Bar.Uint32ToFrobnitzEntry:
|
27
|
+
uint64_to_frobnitz
|
28
|
(2.foo.Bar.Uint64ToFrobnitzEntry:
|
29
|
+
string_to_frobnitz (2.foo.Bar.StringToFrobnitzEntry6
|
30
|
+
sint32_to_string (2.foo.Bar.Sint32ToStringEntry6
|
31
|
+
sint64_to_string (2.foo.Bar.Sint64ToStringEntry4
|
32
|
+
int32_to_string (2.foo.Bar.Int32ToStringEntry4
|
33
|
+
int64_to_string (2.foo.Bar.Int64ToStringEntry6
|
34
|
+
uint32_to_string (2.foo.Bar.Uint32ToStringEntry6
|
35
|
+
uint64_to_string (2.foo.Bar.Uint64ToStringEntry6
|
36
|
+
string_to_string (2.foo.Bar.StringToStringEntry4
|
37
|
+
sint32_to_float (2.foo.Bar.Sint32ToFloatEntry4
|
38
|
+
sint64_to_float (2.foo.Bar.Sint64ToFloatEntry2
|
39
|
+
int32_to_float (2.foo.Bar.Int32ToFloatEntry2
|
40
|
+
int64_to_float (2.foo.Bar.Int64ToFloatEntry4
|
41
|
+
uint32_to_float (2.foo.Bar.Uint32ToFloatEntry4
|
42
|
+
uint64_to_float (2.foo.Bar.Uint64ToFloatEntry4
|
43
|
+
string_to_float (2.foo.Bar.StringToFloatEntry6
|
44
|
+
sint32_to_double (2.foo.Bar.Sint32ToDoubleEntry6
|
45
|
+
sint64_to_double (2.foo.Bar.Sint64ToDoubleEntry4
|
46
|
+
int32_to_double (2.foo.Bar.Int32ToDoubleEntry4
|
47
|
+
int64_to_double (2.foo.Bar.Int64ToDoubleEntry6
|
48
|
+
uint32_to_double! (2.foo.Bar.Uint32ToDoubleEntry6
|
49
|
+
uint64_to_double" (2.foo.Bar.Uint64ToDoubleEntry6
|
50
|
+
string_to_double# (2.foo.Bar.StringToDoubleEntry<
|
51
|
+
Sint32ToBazEntry
|
52
|
+
key (
|
53
|
+
value (2.foo.Baz:8<
|
54
|
+
Sint64ToBazEntry
|
55
|
+
key (
|
56
|
+
value (2.foo.Baz:8;
|
57
|
+
Int32ToBazEntry
|
58
|
+
key (
|
59
|
+
value (2.foo.Baz:8;
|
60
|
+
Int64ToBazEntry
|
61
|
+
key (
|
62
|
+
value (2.foo.Baz:8<
|
63
|
+
Uint32ToBazEntry
|
64
|
+
key (
|
65
|
+
value (2.foo.Baz:8<
|
66
|
+
Uint64ToBazEntry
|
67
|
+
key (
|
68
|
+
value (2.foo.Baz:8<
|
69
|
+
StringToBazEntry
|
70
|
+
key (
|
71
|
+
value (2.foo.Baz:8F
|
72
|
+
Sint32ToFrobnitzEntry
|
73
|
+
key (
|
74
|
+
value (2
|
75
|
+
Sint64ToFrobnitzEntry
|
76
|
+
key (
|
77
|
+
value (2
|
78
|
+
Int32ToFrobnitzEntry
|
79
|
+
key (
|
80
|
+
value (2
|
81
|
+
Int64ToFrobnitzEntry
|
82
|
+
key (
|
83
|
+
value (2
|
84
|
+
Uint32ToFrobnitzEntry
|
85
|
+
key (
|
86
|
+
value (2
|
87
|
+
Uint64ToFrobnitzEntry
|
88
|
+
key (
|
89
|
+
value (2
|
90
|
+
StringToFrobnitzEntry
|
91
|
+
key (
|
92
|
+
value (2
|
93
|
+
Sint32ToStringEntry
|
94
|
+
key (
|
95
|
+
value ( :85
|
96
|
+
Sint64ToStringEntry
|
97
|
+
key (
|
98
|
+
value ( :84
|
99
|
+
Int32ToStringEntry
|
100
|
+
key (
|
101
|
+
value ( :84
|
102
|
+
Int64ToStringEntry
|
103
|
+
key (
|
104
|
+
value ( :85
|
105
|
+
Uint32ToStringEntry
|
106
|
+
key (
|
107
|
+
value ( :85
|
108
|
+
Uint64ToStringEntry
|
109
|
+
key (
|
110
|
+
value ( :85
|
111
|
+
StringToStringEntry
|
112
|
+
key (
|
113
|
+
value ( :84
|
114
|
+
Sint32ToFloatEntry
|
115
|
+
key (
|
116
|
+
value (:84
|
117
|
+
Sint64ToFloatEntry
|
118
|
+
key (
|
119
|
+
value (:83
|
120
|
+
Int32ToFloatEntry
|
121
|
+
key (
|
122
|
+
value (:83
|
123
|
+
Int64ToFloatEntry
|
124
|
+
key (
|
125
|
+
value (:84
|
126
|
+
Uint32ToFloatEntry
|
127
|
+
key (
|
128
|
+
value (:84
|
129
|
+
Uint64ToFloatEntry
|
130
|
+
key (
|
131
|
+
value (:84
|
132
|
+
StringToFloatEntry
|
133
|
+
key (
|
134
|
+
value (:85
|
135
|
+
Sint32ToDoubleEntry
|
136
|
+
key (
|
137
|
+
value (:85
|
138
|
+
Sint64ToDoubleEntry
|
139
|
+
key (
|
140
|
+
value (:84
|
141
|
+
Int32ToDoubleEntry
|
142
|
+
key (
|
143
|
+
value (:84
|
144
|
+
Int64ToDoubleEntry
|
145
|
+
key (
|
146
|
+
value (:85
|
147
|
+
Uint32ToDoubleEntry
|
148
|
+
key (
|
149
|
+
value (:85
|
150
|
+
Uint64ToDoubleEntry
|
151
|
+
key (
|
152
|
+
value (:85
|
153
|
+
StringToDoubleEntry
|
154
|
+
key (
|
155
|
+
value (:8*
|
156
|
+
Frobnitz
|
157
|
+
FROB
|
158
|
+
NITZ
|