Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wantedly/pb-serializer
Serialize Ruby objects to Protocol Buffers
https://github.com/wantedly/pb-serializer
grpc protocol-buffers rails resource-serializer ruby ruby-on-rails serialization
Last synced: 5 days ago
JSON representation
Serialize Ruby objects to Protocol Buffers
- Host: GitHub
- URL: https://github.com/wantedly/pb-serializer
- Owner: wantedly
- License: mit
- Created: 2020-03-10T13:32:00.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-08-06T09:05:52.000Z (5 months ago)
- Last Synced: 2024-12-17T03:50:48.078Z (7 days ago)
- Topics: grpc, protocol-buffers, rails, resource-serializer, ruby, ruby-on-rails, serialization
- Language: Ruby
- Homepage:
- Size: 116 KB
- Stars: 16
- Watchers: 31
- Forks: 3
- Open Issues: 5
-
Metadata Files:
- Readme: README.ja.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Pb::Serializer
`Pb::Serializer` はRuby オブジェクトの Protocol Buffers シリアライザです。
[English version](./README.md)
## Features
- [ActiveModelSerializers](https://github.com/rails-api/active_model_serializers) のような宣言的な API
- [Well-Known Types](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf) への自動変換(例 `google.protobuf.Uint64Value`)
- [`google.protobuf.FieldMask`](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask) を利用した、GraphQL のような選択的フィールド取得のサポート
- [ComputedModel](https://github.com/wantedly/computed_model) と組み合わせることで、複雑なロジックと依存関係を持つ API も宣言的に実装できます## Usage
以下のような Protocol Buffers のメッセージ定義および ActiveRecord モデルを例にします。
```proto
syntax = "proto3";package example;
option ruby_package = "ExamplesPb";
message User {
uint64 id = 1;
string name = 2;
}
``````ruby
# Schema: [id(integer), name(string)]
class User < ActiveRecord::Base
end
````.proto` で定義された `User` メッセージに対応する PbSerializer を実装します。
生成されたクラスと定義されているフィールドすべてを PbSerializer に宣言する必要があります。```ruby
class UserPbSerializer < Pb::Serializer::Base
message ExamplesPb::Userattribute :id
attribute :name
end
```実装した PbSerializer で、Ruby オブジェクトを protobuf message object にシリアライズできます。
```ruby
user = User.find(123)
UserPbSerializer.new(user).to_pb
# =>
```各 attribute の値は、PbSerializer インスタンス、もしくはコンストラクタに渡されたオブジェクト から決定されます。
## Next read
- [Examples](./docs/examples.md)