Class: Tapioca::Compilers::Dsl::Protobuf
- Extended by:
- T::Sig
- Defined in:
- lib/tapioca/compilers/dsl/protobuf.rb
Overview
Tapioca::Compilers::Dsl::Protobuf decorates RBI files for subclasses of [Google::Protobuf::MessageExts](github.com/protocolbuffers/protobuf/tree/master/ruby).
For example, with the following “cart.rb” file:
~~~rb Google::Protobuf::DescriptorPool.generated_pool.build do
add_file("cart.proto", :syntax => :proto3) do
"MyCart" do
optional :shop_id, :int32, 1
optional :customer_id, :int64, 2
optional :number_value, :double, 3
optional :string_value, :string, 4
end
end
end ~~~
this generator will produce the RBI file cart.rbi with the following content:
~~~rbi # cart.rbi # typed: strong class Cart
sig { returns(Integer) }
def customer_id; end
sig { params(month: Integer).returns(Integer) }
def customer_id=(value); end
sig { returns(Integer) }
def shop_id; end
sig { params(value: Integer).returns(Integer) }
def shop_id=(value); end
sig { returns(String) }
def string_value; end
sig { params(value: String).returns(String) }
def string_value=(value); end
sig { returns(Float) }
def number_value; end
sig { params(value: Float).returns(Float) }
def number_value=(value); end
end ~~~
Defined Under Namespace
Classes: Field, TypeMember
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
Methods inherited from Base
Constructor Details
This class inherits a constructor from Tapioca::Compilers::Dsl::Base
Instance Method Details
#decorate(root, constant) ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/tapioca/compilers/dsl/protobuf.rb', line 124 def decorate(root, constant) root.path(constant) do |klass| if constant == Google::Protobuf::RepeatedField create_type_members(klass, "Elem") elsif constant == Google::Protobuf::Map create_type_members(klass, "Key", "Value") else descriptor = T.let(T.unsafe(constant).descriptor, Google::Protobuf::Descriptor) fields = descriptor.map { |desc| create_descriptor_method(klass, desc) } fields.sort_by!(&:name) create_method(klass, "initialize", parameters: fields.map!(&:to_init)) end end end |
#gather_constants ⇒ Object
141 142 143 144 145 |
# File 'lib/tapioca/compilers/dsl/protobuf.rb', line 141 def gather_constants marker = Google::Protobuf::MessageExts::ClassMethods results = T.cast(ObjectSpace.each_object(marker).to_a, T::Array[Module]) results.any? ? results + [Google::Protobuf::RepeatedField, Google::Protobuf::Map] : [] end |