Pb::Serializer
はRuby オブジェクトの Protocol Buffers シリアライザです。
- ActiveModelSerializers のような宣言的な API
- Well-Known Types への自動変換(例
google.protobuf.Uint64Value
) google.protobuf.FieldMask
を利用した、GraphQL のような選択的フィールド取得のサポート- ComputedModel と組み合わせることで、複雑なロジックと依存関係を持つ API も宣言的に実装できます
以下のような Protocol Buffers のメッセージ定義および ActiveRecord モデルを例にします。
syntax = "proto3";
package example;
option ruby_package = "ExamplesPb";
message User {
uint64 id = 1;
string name = 2;
}
# Schema: [id(integer), name(string)]
class User < ActiveRecord::Base
end
.proto
で定義された User
メッセージに対応する PbSerializer を実装します。
生成されたクラスと定義されているフィールドすべてを PbSerializer に宣言する必要があります。
class UserPbSerializer < Pb::Serializer::Base
message ExamplesPb::User
attribute :id
attribute :name
end
実装した PbSerializer で、Ruby オブジェクトを protobuf message object にシリアライズできます。
user = User.find(123)
UserPbSerializer.new(user).to_pb
# => <ExamplesPb::User: id: 123, name: "someuser">
各 attribute の値は、PbSerializer インスタンス、もしくはコンストラクタに渡されたオブジェクト から決定されます。