protostar 0.1.0.beta1
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +60 -0
- data/LICENSE.txt +21 -0
- data/README.md +647 -0
- data/THIRD_PARTY_NOTICES.md +61 -0
- data/exe/protoc-gen-protostar +7 -0
- data/exe/protostar +7 -0
- data/lib/protostar/builder/generator.rb +71 -0
- data/lib/protostar/builder/sink.rb +35 -0
- data/lib/protostar/builder.rb +965 -0
- data/lib/protostar/cli.rb +267 -0
- data/lib/protostar/codec/decode_generator.rb +199 -0
- data/lib/protostar/codec/decoder.rb +296 -0
- data/lib/protostar/codec/encode_generator.rb +224 -0
- data/lib/protostar/codec/encoder.rb +121 -0
- data/lib/protostar/codec/sizer.rb +91 -0
- data/lib/protostar/codec.rb +15 -0
- data/lib/protostar/compiler/ast.rb +193 -0
- data/lib/protostar/compiler/emitters/descriptor_set.rb +57 -0
- data/lib/protostar/compiler/emitters/google_ruby.rb +103 -0
- data/lib/protostar/compiler/emitters/grpc.rb +175 -0
- data/lib/protostar/compiler/emitters/protostar_rbs.rb +252 -0
- data/lib/protostar/compiler/emitters/rbs.rb +394 -0
- data/lib/protostar/compiler/emitters/ruby.rb +503 -0
- data/lib/protostar/compiler/emitters.rb +268 -0
- data/lib/protostar/compiler/include/LICENSE +32 -0
- data/lib/protostar/compiler/include/google/protobuf/any.proto +106 -0
- data/lib/protostar/compiler/include/google/protobuf/api.proto +229 -0
- data/lib/protostar/compiler/include/google/protobuf/compiler/plugin.proto +180 -0
- data/lib/protostar/compiler/include/google/protobuf/cpp_features.proto +87 -0
- data/lib/protostar/compiler/include/google/protobuf/descriptor.proto +1532 -0
- data/lib/protostar/compiler/include/google/protobuf/duration.proto +115 -0
- data/lib/protostar/compiler/include/google/protobuf/empty.proto +51 -0
- data/lib/protostar/compiler/include/google/protobuf/field_mask.proto +243 -0
- data/lib/protostar/compiler/include/google/protobuf/java_features.proto +132 -0
- data/lib/protostar/compiler/include/google/protobuf/source_context.proto +48 -0
- data/lib/protostar/compiler/include/google/protobuf/struct.proto +111 -0
- data/lib/protostar/compiler/include/google/protobuf/timestamp.proto +145 -0
- data/lib/protostar/compiler/include/google/protobuf/type.proto +217 -0
- data/lib/protostar/compiler/include/google/protobuf/wrappers.proto +157 -0
- data/lib/protostar/compiler/lexer.rb +659 -0
- data/lib/protostar/compiler/linker.rb +894 -0
- data/lib/protostar/compiler/option_interpreter.rb +363 -0
- data/lib/protostar/compiler/parser.rb +1696 -0
- data/lib/protostar/compiler/retention.rb +104 -0
- data/lib/protostar/compiler/run.rb +184 -0
- data/lib/protostar/compiler/source_info.rb +161 -0
- data/lib/protostar/compiler/symbol_table.rb +223 -0
- data/lib/protostar/compiler/text_format.rb +340 -0
- data/lib/protostar/compiler/validator.rb +944 -0
- data/lib/protostar/compiler.rb +304 -0
- data/lib/protostar/diagnostics/codes.rb +1307 -0
- data/lib/protostar/diagnostics/formats.rb +64 -0
- data/lib/protostar/diagnostics/renderer.rb +240 -0
- data/lib/protostar/diagnostics/source.rb +153 -0
- data/lib/protostar/diagnostics.rb +117 -0
- data/lib/protostar/dsl.rb +367 -0
- data/lib/protostar/enum.rb +70 -0
- data/lib/protostar/errors.rb +23 -0
- data/lib/protostar/google/protobuf/any_pb.rb +90 -0
- data/lib/protostar/google/protobuf/api_pb.rb +199 -0
- data/lib/protostar/google/protobuf/compiler/plugin_pb.rb +168 -0
- data/lib/protostar/google/protobuf/descriptor_pb.rb +1239 -0
- data/lib/protostar/google/protobuf/duration_pb.rb +99 -0
- data/lib/protostar/google/protobuf/empty_pb.rb +36 -0
- data/lib/protostar/google/protobuf/field_mask_pb.rb +228 -0
- data/lib/protostar/google/protobuf/source_context_pb.rb +33 -0
- data/lib/protostar/google/protobuf/struct_pb.rb +91 -0
- data/lib/protostar/google/protobuf/timestamp_pb.rb +129 -0
- data/lib/protostar/google/protobuf/type_pb.rb +202 -0
- data/lib/protostar/google/protobuf/wrappers_pb.rb +125 -0
- data/lib/protostar/google_protobuf_shim.rb +24 -0
- data/lib/protostar/json/encoder.rb +340 -0
- data/lib/protostar/json/errors.rb +34 -0
- data/lib/protostar/json/parser.rb +437 -0
- data/lib/protostar/json/path.rb +39 -0
- data/lib/protostar/json.rb +95 -0
- data/lib/protostar/lint/command.rb +197 -0
- data/lib/protostar/lint/config.rb +98 -0
- data/lib/protostar/lint/context.rb +126 -0
- data/lib/protostar/lint/directives.rb +56 -0
- data/lib/protostar/lint/fixer.rb +165 -0
- data/lib/protostar/lint/naming.rb +54 -0
- data/lib/protostar/lint/rule.rb +120 -0
- data/lib/protostar/lint/rules/comment_enum.rb +31 -0
- data/lib/protostar/lint/rules/comment_enum_value.rb +32 -0
- data/lib/protostar/lint/rules/comment_field.rb +33 -0
- data/lib/protostar/lint/rules/comment_message.rb +31 -0
- data/lib/protostar/lint/rules/comment_rpc.rb +31 -0
- data/lib/protostar/lint/rules/comment_service.rb +31 -0
- data/lib/protostar/lint/rules/edition_recommended.rb +31 -0
- data/lib/protostar/lint/rules/enum_first_value_zero.rb +34 -0
- data/lib/protostar/lint/rules/enum_pascal_case.rb +25 -0
- data/lib/protostar/lint/rules/enum_value_prefix.rb +38 -0
- data/lib/protostar/lint/rules/enum_value_upper_snake_case.rb +28 -0
- data/lib/protostar/lint/rules/enum_zero_value_suffix.rb +41 -0
- data/lib/protostar/lint/rules/field_lower_snake_case.rb +34 -0
- data/lib/protostar/lint/rules/field_not_required.rb +39 -0
- data/lib/protostar/lint/rules/field_number_reuse_risk.rb +45 -0
- data/lib/protostar/lint/rules/field_numbers_hot_range.rb +44 -0
- data/lib/protostar/lint/rules/file_lower_snake_case.rb +27 -0
- data/lib/protostar/lint/rules/import_no_public.rb +29 -0
- data/lib/protostar/lint/rules/import_no_weak.rb +28 -0
- data/lib/protostar/lint/rules/import_used.rb +33 -0
- data/lib/protostar/lint/rules/message_pascal_case.rb +27 -0
- data/lib/protostar/lint/rules/no_deprecated_features.rb +50 -0
- data/lib/protostar/lint/rules/no_groups.rb +34 -0
- data/lib/protostar/lint/rules/oneof_lower_snake_case.rb +27 -0
- data/lib/protostar/lint/rules/package_defined.rb +28 -0
- data/lib/protostar/lint/rules/package_directory_match.rb +33 -0
- data/lib/protostar/lint/rules/package_lower_snake_case.rb +28 -0
- data/lib/protostar/lint/rules/package_same_directory.rb +39 -0
- data/lib/protostar/lint/rules/package_version_suffix.rb +31 -0
- data/lib/protostar/lint/rules/reserved_names_with_numbers.rb +44 -0
- data/lib/protostar/lint/rules/rpc_pascal_case.rb +25 -0
- data/lib/protostar/lint/rules/rpc_request_response_unique.rb +40 -0
- data/lib/protostar/lint/rules/rpc_request_standard_name.rb +32 -0
- data/lib/protostar/lint/rules/rpc_response_standard_name.rb +31 -0
- data/lib/protostar/lint/rules/service_pascal_case.rb +25 -0
- data/lib/protostar/lint/rules/service_suffix.rb +28 -0
- data/lib/protostar/lint/rules/syntax_specified.rb +35 -0
- data/lib/protostar/lint/runner.rb +135 -0
- data/lib/protostar/lint.rb +122 -0
- data/lib/protostar/message/accessors.rb +86 -0
- data/lib/protostar/message/coercion.rb +171 -0
- data/lib/protostar/message/field_info.rb +145 -0
- data/lib/protostar/message/reflection.rb +149 -0
- data/lib/protostar/message.rb +572 -0
- data/lib/protostar/plugin.rb +94 -0
- data/lib/protostar/schema/default_value.rb +113 -0
- data/lib/protostar/schema/descriptor.rb +41 -0
- data/lib/protostar/schema/draft/copy.rb +88 -0
- data/lib/protostar/schema/draft/resolution.rb +177 -0
- data/lib/protostar/schema/draft.rb +779 -0
- data/lib/protostar/schema/enum.rb +106 -0
- data/lib/protostar/schema/extension_range.rb +37 -0
- data/lib/protostar/schema/features.rb +153 -0
- data/lib/protostar/schema/field.rb +201 -0
- data/lib/protostar/schema/file.rb +217 -0
- data/lib/protostar/schema/freezer.rb +61 -0
- data/lib/protostar/schema/message.rb +104 -0
- data/lib/protostar/schema/oneof.rb +38 -0
- data/lib/protostar/schema/options.rb +367 -0
- data/lib/protostar/schema/pool.rb +179 -0
- data/lib/protostar/schema/proto.rb +576 -0
- data/lib/protostar/schema/resolver.rb +118 -0
- data/lib/protostar/schema/service.rb +89 -0
- data/lib/protostar/schema/source_info.rb +53 -0
- data/lib/protostar/schema.rb +65 -0
- data/lib/protostar/short_names/any.rb +7 -0
- data/lib/protostar/short_names/duration.rb +7 -0
- data/lib/protostar/short_names/empty.rb +7 -0
- data/lib/protostar/short_names/field_mask.rb +7 -0
- data/lib/protostar/short_names/struct.rb +9 -0
- data/lib/protostar/short_names/timestamp.rb +7 -0
- data/lib/protostar/short_names/wrappers.rb +15 -0
- data/lib/protostar/text/extensions.rb +114 -0
- data/lib/protostar/text/parser.rb +439 -0
- data/lib/protostar/text/printer.rb +304 -0
- data/lib/protostar/text/tokenizer.rb +116 -0
- data/lib/protostar/text.rb +67 -0
- data/lib/protostar/types.rb +152 -0
- data/lib/protostar/unknown_field.rb +58 -0
- data/lib/protostar/version.rb +5 -0
- data/lib/protostar/view/generator.rb +298 -0
- data/lib/protostar/view/map.rb +194 -0
- data/lib/protostar/view/repeated.rb +143 -0
- data/lib/protostar/view/scan.rb +183 -0
- data/lib/protostar/view.rb +283 -0
- data/lib/protostar/well_known/any.rb +52 -0
- data/lib/protostar/well_known/duration.rb +53 -0
- data/lib/protostar/well_known/list_value.rb +63 -0
- data/lib/protostar/well_known/struct.rb +55 -0
- data/lib/protostar/well_known/timestamp.rb +64 -0
- data/lib/protostar/well_known/value.rb +60 -0
- data/lib/protostar/well_known.rb +38 -0
- data/lib/protostar/wire/io_source.rb +40 -0
- data/lib/protostar/wire/reader.rb +254 -0
- data/lib/protostar/wire/writer.rb +201 -0
- data/lib/protostar/wire.rb +96 -0
- data/lib/protostar.rb +95 -0
- data/shims/google-protobuf/lib/google/protobuf/any_pb.rb +17 -0
- data/shims/google-protobuf/lib/google/protobuf/api_pb.rb +22 -0
- data/shims/google-protobuf/lib/google/protobuf/compiler/plugin_pb.rb +25 -0
- data/shims/google-protobuf/lib/google/protobuf/descriptor_pb.rb +72 -0
- data/shims/google-protobuf/lib/google/protobuf/descriptor_pool.rb +164 -0
- data/shims/google-protobuf/lib/google/protobuf/descriptors.rb +553 -0
- data/shims/google-protobuf/lib/google/protobuf/duration_pb.rb +17 -0
- data/shims/google-protobuf/lib/google/protobuf/empty_pb.rb +17 -0
- data/shims/google-protobuf/lib/google/protobuf/field_mask_pb.rb +17 -0
- data/shims/google-protobuf/lib/google/protobuf/internal/convert.rb +180 -0
- data/shims/google-protobuf/lib/google/protobuf/internal/extensions.rb +154 -0
- data/shims/google-protobuf/lib/google/protobuf/internal/json.rb +104 -0
- data/shims/google-protobuf/lib/google/protobuf/internal/well_known.rb +140 -0
- data/shims/google-protobuf/lib/google/protobuf/map.rb +216 -0
- data/shims/google-protobuf/lib/google/protobuf/message.rb +544 -0
- data/shims/google-protobuf/lib/google/protobuf/message_exts.rb +41 -0
- data/shims/google-protobuf/lib/google/protobuf/plugin_pb.rb +4 -0
- data/shims/google-protobuf/lib/google/protobuf/repeated_field.rb +366 -0
- data/shims/google-protobuf/lib/google/protobuf/source_context_pb.rb +17 -0
- data/shims/google-protobuf/lib/google/protobuf/struct_pb.rb +20 -0
- data/shims/google-protobuf/lib/google/protobuf/timestamp_pb.rb +17 -0
- data/shims/google-protobuf/lib/google/protobuf/type_pb.rb +27 -0
- data/shims/google-protobuf/lib/google/protobuf/well_known_types.rb +37 -0
- data/shims/google-protobuf/lib/google/protobuf/wrappers_pb.rb +25 -0
- data/shims/google-protobuf/lib/google/protobuf.rb +107 -0
- data/shims/google-protobuf/lib/google/protobuf_ffi.rb +5 -0
- data/shims/google-protobuf/lib/google/protobuf_native.rb +5 -0
- data/sig/protostar/google/protobuf/any_pb.rbs +77 -0
- data/sig/protostar/google/protobuf/api_pb.rbs +242 -0
- data/sig/protostar/google/protobuf/compiler/plugin_pb.rbs +264 -0
- data/sig/protostar/google/protobuf/descriptor_pb.rbs +2220 -0
- data/sig/protostar/google/protobuf/duration_pb.rbs +82 -0
- data/sig/protostar/google/protobuf/empty_pb.rbs +18 -0
- data/sig/protostar/google/protobuf/field_mask_pb.rbs +170 -0
- data/sig/protostar/google/protobuf/source_context_pb.rbs +24 -0
- data/sig/protostar/google/protobuf/struct_pb.rbs +135 -0
- data/sig/protostar/google/protobuf/timestamp_pb.rbs +102 -0
- data/sig/protostar/google/protobuf/type_pb.rbs +304 -0
- data/sig/protostar/google/protobuf/wrappers_pb.rbs +169 -0
- data/sig/protostar/lint.rbs +216 -0
- data/sig/protostar.rbs +326 -0
- metadata +366 -0
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "forwardable"
|
|
4
|
+
|
|
5
|
+
module Google
|
|
6
|
+
module Protobuf
|
|
7
|
+
module Internal
|
|
8
|
+
# What every descriptor wrapper shares: a {Protostar::Schema} descriptor
|
|
9
|
+
# and the DescriptorPool it belongs to. Methods the gem does not have are
|
|
10
|
+
# passed to the schema descriptor, because protostar's runtime reads
|
|
11
|
+
# `klass.descriptor` (here a wrapper) as a {Protostar::Schema::Message}.
|
|
12
|
+
# @api private
|
|
13
|
+
module Wrapper
|
|
14
|
+
def self.included(base)
|
|
15
|
+
base.extend(ClassMethods)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module ClassMethods
|
|
19
|
+
def new(*)
|
|
20
|
+
raise "Descriptor objects may not be created from Ruby."
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @api private
|
|
24
|
+
def __wrap(schema, pool)
|
|
25
|
+
instance = allocate
|
|
26
|
+
instance.send(:initialize, schema, pool)
|
|
27
|
+
instance
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @return [DescriptorPool]
|
|
32
|
+
attr_reader :descriptor_pool
|
|
33
|
+
|
|
34
|
+
# @api private
|
|
35
|
+
attr_reader :__schema
|
|
36
|
+
|
|
37
|
+
def to_s
|
|
38
|
+
inspect
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def inspect
|
|
42
|
+
"#{self.class.name}: #{name}"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def initialize(schema, pool)
|
|
48
|
+
@__schema = schema
|
|
49
|
+
@descriptor_pool = pool
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def wrap(schema)
|
|
53
|
+
schema && @descriptor_pool.__wrap(schema)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# The descriptor's options as a google.protobuf.*Options message of
|
|
57
|
+
# the generated pool, frozen, without `features` (as the gem gives them)
|
|
58
|
+
def options_message(type)
|
|
59
|
+
options = @__schema.options
|
|
60
|
+
bytes = options.declared? ? options.to_proto.encode : ""
|
|
61
|
+
message = Google::Protobuf.const_get(type).decode(bytes)
|
|
62
|
+
message.clear_features if message.respond_to?(:clear_features)
|
|
63
|
+
message.freeze
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# The descriptor as a google.protobuf.*Proto message of the generated
|
|
67
|
+
# pool, with json_names only where a .proto would have spelled them
|
|
68
|
+
# out, as upb's to_proto gives them
|
|
69
|
+
def proto_message(type, proto)
|
|
70
|
+
Google::Protobuf.const_get(type).decode(proto.encode)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# A message type
|
|
76
|
+
class Descriptor
|
|
77
|
+
include Internal::Wrapper
|
|
78
|
+
include Enumerable
|
|
79
|
+
extend Forwardable
|
|
80
|
+
|
|
81
|
+
# protostar's runtime reads `klass.descriptor` as a Protostar::Schema::Message
|
|
82
|
+
# (JSON, text, Any); these are the methods it calls
|
|
83
|
+
# @api private
|
|
84
|
+
def_delegators :@__schema, :full_name, :file, :fields, :fields_by_name, :fields_by_number,
|
|
85
|
+
:fields_by_json_name, :map_entry?, :message_set_wire_format?, :extension_number?
|
|
86
|
+
|
|
87
|
+
# @return [String] the full name
|
|
88
|
+
def name
|
|
89
|
+
@__schema.full_name
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def inspect
|
|
93
|
+
"Descriptor - (not the message class) #{name}"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# @return [FileDescriptor]
|
|
97
|
+
def file_descriptor
|
|
98
|
+
wrap(@__schema.file)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Yields each field, in declaration order
|
|
102
|
+
# @yieldparam field [FieldDescriptor]
|
|
103
|
+
def each
|
|
104
|
+
return enum_for(:each) unless block_given?
|
|
105
|
+
@__schema.fields.each { |f| yield wrap(f) }
|
|
106
|
+
nil
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Yields each oneof, synthetic ones (proto3 `optional`) included
|
|
110
|
+
# @yieldparam oneof [OneofDescriptor]
|
|
111
|
+
def each_oneof
|
|
112
|
+
return enum_for(:each_oneof) unless block_given?
|
|
113
|
+
@__schema.oneofs.each { |o| yield wrap(o) }
|
|
114
|
+
nil
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# @param name [String]
|
|
118
|
+
# @return [FieldDescriptor, nil]
|
|
119
|
+
def lookup(name)
|
|
120
|
+
wrap(@__schema.fields_by_name[name.to_s])
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# @param name [String]
|
|
124
|
+
# @return [OneofDescriptor, nil]
|
|
125
|
+
def lookup_oneof(name)
|
|
126
|
+
wrap(@__schema.oneofs.find { |o| o.name == name.to_s })
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @return [Class] the message class
|
|
130
|
+
def msgclass
|
|
131
|
+
@msgclass ||= @descriptor_pool.__msgclass(@__schema)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @return [Google::Protobuf::MessageOptions] frozen
|
|
135
|
+
def options
|
|
136
|
+
@options ||= options_message(:MessageOptions)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @return [Google::Protobuf::DescriptorProto]
|
|
140
|
+
def to_proto
|
|
141
|
+
@to_proto ||= proto_message(:DescriptorProto, @__schema.to_proto(default_json_names: false))
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# @api private
|
|
145
|
+
def __msgclass=(klass)
|
|
146
|
+
@msgclass = klass
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
private
|
|
150
|
+
|
|
151
|
+
WRAPPERS = %w[DoubleValue FloatValue Int64Value UInt64Value Int32Value UInt32Value StringValue BytesValue BoolValue]
|
|
152
|
+
.to_h { |n| ["google.protobuf.#{n}", true] }.freeze
|
|
153
|
+
private_constant :WRAPPERS
|
|
154
|
+
|
|
155
|
+
def wrapper?
|
|
156
|
+
WRAPPERS.key?(name)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# A field of a message, or an extension
|
|
161
|
+
class FieldDescriptor
|
|
162
|
+
include Internal::Wrapper
|
|
163
|
+
|
|
164
|
+
# Field types as their C types: what RepeatedField and Map compare
|
|
165
|
+
CTYPES = {
|
|
166
|
+
int32: :int32, sint32: :int32, sfixed32: :int32, int64: :int64, sint64: :int64, sfixed64: :int64,
|
|
167
|
+
uint32: :uint32, fixed32: :uint32, uint64: :uint64, fixed64: :uint64, float: :float, double: :double,
|
|
168
|
+
bool: :bool, string: :string, bytes: :bytes, enum: :enum, message: :message, group: :message
|
|
169
|
+
}.freeze
|
|
170
|
+
|
|
171
|
+
# @return [String]
|
|
172
|
+
def name
|
|
173
|
+
@__schema.name
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# @return [String]
|
|
177
|
+
def json_name
|
|
178
|
+
@__schema.json_name
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# @return [Integer]
|
|
182
|
+
def number
|
|
183
|
+
@__schema.number
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# @return [Symbol] :int32, :string, :message, :group and so on; map fields are :message
|
|
187
|
+
def type
|
|
188
|
+
@__schema.type
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# @return [Symbol] :optional, :required or :repeated
|
|
192
|
+
def label
|
|
193
|
+
if @__schema.repeated? then :repeated
|
|
194
|
+
elsif @__schema.required? then :required
|
|
195
|
+
else :optional
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# @return [Object, nil] the default as the field's reader gives it; nil for messages
|
|
200
|
+
def default
|
|
201
|
+
return nil if sub_message?
|
|
202
|
+
if repeated?
|
|
203
|
+
Internal::Convert.zero(type, subtype)
|
|
204
|
+
elsif type == :enum
|
|
205
|
+
d = @__schema.default
|
|
206
|
+
d.is_a?(Symbol) ? subtype.__names.fetch(subtype.__numbers.fetch(d)) : d
|
|
207
|
+
else
|
|
208
|
+
@__schema.default
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# @return [String, nil] the full name of the message or enum type
|
|
213
|
+
def submsg_name
|
|
214
|
+
sub = @__schema.message_type || @__schema.enum_type
|
|
215
|
+
sub&.full_name
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# @return [Descriptor, EnumDescriptor, nil] for message and enum fields;
|
|
219
|
+
# a map field's is its entry message
|
|
220
|
+
def subtype
|
|
221
|
+
return @subtype if defined?(@subtype)
|
|
222
|
+
@subtype = wrap(@__schema.message_type || @__schema.enum_type)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def has_presence?
|
|
226
|
+
@__schema.presence?
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def is_packed?
|
|
230
|
+
@__schema.packed?
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def map?
|
|
234
|
+
@__schema.map?
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def required?
|
|
238
|
+
@__schema.required?
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def repeated?
|
|
242
|
+
@__schema.repeated?
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def sub_message?
|
|
246
|
+
type == :message || type == :group
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def wrapper?
|
|
250
|
+
sub = subtype
|
|
251
|
+
sub.is_a?(Descriptor) && sub.send(:wrapper?)
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# @param msg [Message]
|
|
255
|
+
# @return [Object] the field's value on the message
|
|
256
|
+
# @raise [TypeError] when the message is not of the field's message type
|
|
257
|
+
def get(msg)
|
|
258
|
+
check_owner(msg, "get")
|
|
259
|
+
msg.__gget(self)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# Sets the field, with the checks its writer makes
|
|
263
|
+
def set(msg, value)
|
|
264
|
+
check_owner(msg, "set")
|
|
265
|
+
msg.__gset(self, value)
|
|
266
|
+
nil
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
# @raise [ArgumentError] when the field does not track presence
|
|
270
|
+
def has?(msg)
|
|
271
|
+
check_owner(msg, "has")
|
|
272
|
+
raise ArgumentError, "does not track presence" unless has_presence?
|
|
273
|
+
msg.__ghas?(self)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def clear(msg)
|
|
277
|
+
check_owner(msg, "clear")
|
|
278
|
+
msg.__gclear(self)
|
|
279
|
+
nil
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# @return [Google::Protobuf::FieldOptions] frozen
|
|
283
|
+
def options
|
|
284
|
+
@options ||= options_message(:FieldOptions)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
# @return [Google::Protobuf::FieldDescriptorProto]
|
|
288
|
+
def to_proto
|
|
289
|
+
@to_proto ||= proto_message(:FieldDescriptorProto, @__schema.to_proto(default_json_names: false))
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# @api private
|
|
293
|
+
# @return [Protostar::Message::FieldInfo, nil] nil for extensions
|
|
294
|
+
def __info
|
|
295
|
+
return @__info if defined?(@__info)
|
|
296
|
+
@__info = if @__schema.extension?
|
|
297
|
+
nil
|
|
298
|
+
else
|
|
299
|
+
wrap(@__schema.containing_message).msgclass.__by_number[number]
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# @api private
|
|
304
|
+
def __ctype
|
|
305
|
+
CTYPES.fetch(type)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# @api private
|
|
309
|
+
def __extension?
|
|
310
|
+
@__schema.extension?
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# @api private
|
|
314
|
+
# @return [Descriptor] the message the field belongs to (an extension's extendee)
|
|
315
|
+
def __owner
|
|
316
|
+
@__owner ||= wrap(@__schema.extension? ? @__schema.extendee : @__schema.containing_message)
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
private
|
|
320
|
+
|
|
321
|
+
def check_owner(msg, verb)
|
|
322
|
+
return if msg.class.respond_to?(:descriptor) && msg.class.descriptor.equal?(__owner)
|
|
323
|
+
raise TypeError, "#{verb} method called on wrong message type"
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
# A oneof of a message
|
|
328
|
+
class OneofDescriptor
|
|
329
|
+
include Internal::Wrapper
|
|
330
|
+
include Enumerable
|
|
331
|
+
|
|
332
|
+
def name
|
|
333
|
+
@__schema.name
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# @yieldparam field [FieldDescriptor]
|
|
337
|
+
def each
|
|
338
|
+
return enum_for(:each) unless block_given?
|
|
339
|
+
@__schema.fields.each { |f| yield wrap(f) }
|
|
340
|
+
nil
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
# @return [Google::Protobuf::OneofOptions] frozen
|
|
344
|
+
def options
|
|
345
|
+
@options ||= options_message(:OneofOptions)
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
# @return [Google::Protobuf::OneofDescriptorProto]
|
|
349
|
+
def to_proto
|
|
350
|
+
@to_proto ||= proto_message(:OneofDescriptorProto, @__schema.to_proto)
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
# An enum type
|
|
355
|
+
class EnumDescriptor
|
|
356
|
+
include Internal::Wrapper
|
|
357
|
+
include Enumerable
|
|
358
|
+
|
|
359
|
+
# @return [String] the full name
|
|
360
|
+
def name
|
|
361
|
+
@__schema.full_name
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
# @return [FileDescriptor]
|
|
365
|
+
def file_descriptor
|
|
366
|
+
wrap(@__schema.file)
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
# @param name [String, Symbol]
|
|
370
|
+
# @return [Integer, nil]
|
|
371
|
+
def lookup_name(name)
|
|
372
|
+
__numbers[name.to_sym]
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
# @param number [Integer]
|
|
376
|
+
# @return [Symbol, nil] the first name declared for the number
|
|
377
|
+
def lookup_value(number)
|
|
378
|
+
__names[number]
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# Yields every value, aliases included
|
|
382
|
+
# @yieldparam name [Symbol]
|
|
383
|
+
# @yieldparam number [Integer]
|
|
384
|
+
def each
|
|
385
|
+
return enum_for(:each) unless block_given?
|
|
386
|
+
@__schema.values.each { |v| yield v.name.to_sym, v.number }
|
|
387
|
+
nil
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
# @return [false] the gem treats every enum as open, whatever the .proto says
|
|
391
|
+
def is_closed?
|
|
392
|
+
false
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
# @return [Module] the enum module: a constant per value, `lookup`, `resolve`, `descriptor`
|
|
396
|
+
def enummodule
|
|
397
|
+
@enummodule ||= build_module
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
# @return [Google::Protobuf::EnumOptions] frozen
|
|
401
|
+
def options
|
|
402
|
+
@options ||= options_message(:EnumOptions)
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
# @return [Google::Protobuf::EnumDescriptorProto]
|
|
406
|
+
def to_proto
|
|
407
|
+
@to_proto ||= proto_message(:EnumDescriptorProto, @__schema.to_proto)
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
# @api private
|
|
411
|
+
# @return [Hash{Integer => Symbol}] number to its first name
|
|
412
|
+
def __names
|
|
413
|
+
@__names ||= @__schema.values.each_with_object({}) { |v, h| h[v.number] ||= v.name.to_sym }.freeze
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
# @api private
|
|
417
|
+
# @return [Hash{Symbol => Integer}] every name to its number
|
|
418
|
+
def __numbers
|
|
419
|
+
@__numbers ||= @__schema.values.to_h { |v| [v.name.to_sym, v.number] }.freeze
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
private
|
|
423
|
+
|
|
424
|
+
def build_module
|
|
425
|
+
descriptor = self
|
|
426
|
+
mod = Module.new
|
|
427
|
+
mod.instance_variable_set(:@descriptor, descriptor)
|
|
428
|
+
mod.extend(Internal::EnumModule)
|
|
429
|
+
@__schema.values.each do |v|
|
|
430
|
+
const = v.name
|
|
431
|
+
if const.match?(/\A[a-z]/)
|
|
432
|
+
const = const[0].upcase + const[1..]
|
|
433
|
+
elsif !const.match?(/\A[A-Z]/)
|
|
434
|
+
warn("Enum value '#{v.name}' does not start with an uppercase letter as is required for Ruby constants.")
|
|
435
|
+
next
|
|
436
|
+
end
|
|
437
|
+
mod.const_set(const, v.number) unless mod.const_defined?(const, false)
|
|
438
|
+
end
|
|
439
|
+
mod
|
|
440
|
+
end
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
module Internal
|
|
444
|
+
# Extended by every enum module
|
|
445
|
+
# @api private
|
|
446
|
+
module EnumModule
|
|
447
|
+
# @return [EnumDescriptor]
|
|
448
|
+
attr_reader :descriptor
|
|
449
|
+
|
|
450
|
+
# @return [Symbol, nil]
|
|
451
|
+
def lookup(number)
|
|
452
|
+
@descriptor.lookup_value(number)
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
# @return [Integer, nil]
|
|
456
|
+
def resolve(name)
|
|
457
|
+
@descriptor.lookup_name(name)
|
|
458
|
+
end
|
|
459
|
+
end
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
# A service
|
|
463
|
+
class ServiceDescriptor
|
|
464
|
+
include Internal::Wrapper
|
|
465
|
+
include Enumerable
|
|
466
|
+
|
|
467
|
+
# @return [String] the full name
|
|
468
|
+
def name
|
|
469
|
+
@__schema.full_name
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
# @return [FileDescriptor]
|
|
473
|
+
def file_descriptor
|
|
474
|
+
wrap(@__schema.file)
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
# @yieldparam method [MethodDescriptor]
|
|
478
|
+
def each
|
|
479
|
+
return enum_for(:each) unless block_given?
|
|
480
|
+
@__schema.rpcs.each { |m| yield wrap(m) }
|
|
481
|
+
nil
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
# @return [Google::Protobuf::ServiceOptions] frozen
|
|
485
|
+
def options
|
|
486
|
+
@options ||= options_message(:ServiceOptions)
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
# @return [Google::Protobuf::ServiceDescriptorProto]
|
|
490
|
+
def to_proto
|
|
491
|
+
@to_proto ||= proto_message(:ServiceDescriptorProto, @__schema.to_proto)
|
|
492
|
+
end
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
# A method of a service
|
|
496
|
+
class MethodDescriptor
|
|
497
|
+
include Internal::Wrapper
|
|
498
|
+
|
|
499
|
+
def name
|
|
500
|
+
@__schema.name
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
# @return [Descriptor]
|
|
504
|
+
def input_type
|
|
505
|
+
wrap(@__schema.input_type)
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
# @return [Descriptor]
|
|
509
|
+
def output_type
|
|
510
|
+
wrap(@__schema.output_type)
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
def client_streaming
|
|
514
|
+
@__schema.client_streaming?
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
def server_streaming
|
|
518
|
+
@__schema.server_streaming?
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
# @return [Google::Protobuf::MethodOptions] frozen
|
|
522
|
+
def options
|
|
523
|
+
@options ||= options_message(:MethodOptions)
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
# @return [Google::Protobuf::MethodDescriptorProto]
|
|
527
|
+
def to_proto
|
|
528
|
+
@to_proto ||= proto_message(:MethodDescriptorProto, @__schema.to_proto)
|
|
529
|
+
end
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
# A .proto file
|
|
533
|
+
class FileDescriptor
|
|
534
|
+
include Internal::Wrapper
|
|
535
|
+
|
|
536
|
+
def name
|
|
537
|
+
@__schema.name
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
# @return [Google::Protobuf::FileOptions] frozen
|
|
541
|
+
def options
|
|
542
|
+
@options ||= options_message(:FileOptions)
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
# @return [Google::Protobuf::FileDescriptorProto]
|
|
546
|
+
def to_proto
|
|
547
|
+
@to_proto ||= Google::Protobuf::FileDescriptorProto.decode(
|
|
548
|
+
Protostar::Compiler::Emitters::GoogleRuby.serialized(@__schema)
|
|
549
|
+
)
|
|
550
|
+
end
|
|
551
|
+
end
|
|
552
|
+
end
|
|
553
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: google/protobuf/duration.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x1egoogle/protobuf/duration.proto\x12\x0fgoogle.protobuf\"*\n\x08\x44uration\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05\x42\x83\x01\n\x13\x63om.google.protobufB\rDurationProtoP\x01Z1google.golang.org/protobuf/types/known/durationpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Google
|
|
14
|
+
module Protobuf
|
|
15
|
+
Duration = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.Duration").msgclass
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: google/protobuf/empty.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x1bgoogle/protobuf/empty.proto\x12\x0fgoogle.protobuf\"\x07\n\x05\x45mptyB}\n\x13\x63om.google.protobufB\nEmptyProtoP\x01Z.google.golang.org/protobuf/types/known/emptypb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Google
|
|
14
|
+
module Protobuf
|
|
15
|
+
Empty = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.Empty").msgclass
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: google/protobuf/field_mask.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n google/protobuf/field_mask.proto\x12\x0fgoogle.protobuf\"\x1a\n\tFieldMask\x12\r\n\x05paths\x18\x01 \x03(\tB\x85\x01\n\x13\x63om.google.protobufB\x0e\x46ieldMaskProtoP\x01Z2google.golang.org/protobuf/types/known/fieldmaskpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Google
|
|
14
|
+
module Protobuf
|
|
15
|
+
FieldMask = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.FieldMask").msgclass
|
|
16
|
+
end
|
|
17
|
+
end
|