2018-08-01から1ヶ月間の記事一覧

protobufで0 byteをデコードする

Language Guideに以下のようにフィールドに値がセットされていない場合はdefault valueが使われることが書かれています。 When a message is parsed, if the encoded message does not contain a particular singular element, the corresponding field in t…

Golangで出力したprotobufバイナリをRustで読み込む

ここ三回くらいprotobufの記事を書いてきましたが、Goばかりだったので、Rustで読み込んでみました。 事前準備:Goでバイナリを出力する user.protoを以下のように定義します。 syntax = "proto3"; package user; message User { string name = 1; int32 age…

protobufのVarintを64bitから32bitに変更したときの挙動

protobufのVarintはProtocol Buffers - Encodingで定義されるように、32-bit(int32, uint32, sint32)や64-bit(int64, uint64, sint64)のどちらも含まれています。 Varintのエンコーディングは、その値によってbyte長が変わりますが(負数は-1のような小さい…

protobufのenumの互換性について

前回記事の続きです。 前回は、boolだったフィールドをint32に変換した場合に互換性が保たれるのかを見ました。 実用上はint32にするより、enumにすることが多いと思うので、今回はenumでの互換性をみていきます。 enumについては、Language GuideのEnumerat…