ちりもつもればミルキーウェイ

好奇心に可処分時間が奪われる

wireのunmarshallerがひと落ち着きした

wireのunmarshallerがだいたいできて一通り落ち着いたので投下

github.com

READMEもサポートしてる型くらいは書いておいた。useageで動くplaygroundのリンクはってあるのが丁寧さ+1といったかんじ

どのくらい実装したの

下位互換まわりは全く実装してないけど、それ以外のproto3の仕様はだいたい8~9割くらいは実装したんじゃなかろうか(もともと小さいサイズの仕様だから威張れないけど)

やってないのはenumくらいじゃなかろうか

ちなみにoptionalはproto3の仕様で消えたんですが、v3.15から復活しています https://github.com/protocolbuffers/protobuf/releases/tag/v3.15.0

ぼくはoptionalを今回まったく実装してないんですが、なんとproto3で舞い戻ってきたoptionalは protocコンパイラ側で oneof としてこっちのコード生成機に情報を渡してくれる ので、ぼくらはoneofだけ作れてればいいっぽいです。労せずoptional対応してしまった...

なんだけどコード生成まわり今回全くやってないからoptionalもできる!と言われても気持ち的にはふ〜ん僕は試せないけどねみたいなかんじなので△といったところです

しんどかったのはoneofで、Goの場合はinterfaceとかを使って実装するんだけど、bindしたいstructのフィールドのinterfaceの型を突っ込んでその実装をとってこれる必要があり、かなり 闇の深いことをしている

作り始めてから落ち着くまで遅くない?

実装自体は2021/4/2とかに終わってて、もうちょいリファクタしたりREADMEかいたりしなきゃなーーとは思ってはいたが重い腰が上がらずに放置していた
社のもくもく会でRustつかってもういっかい書いたらおもしろそうだなーとふと思い立ったので、とりあえずケリを付けるか〜となって倒した

まだやりたいこと

ほんとうはまだやりたいことがあって

  • marshallerのほう(これはやること逆になるだけだからやれるんだけど、単純に手数がありそうでめんどくさくてやってない)
  • protocに食わせられるコード生成バイナリ作成

あたりはやりたかった。のですがpowerが足りないのでいつか気合が充填されたらやります

とりあえずバイナリは読み取るのも書き込むのもおもしろいということを改めて認識させてくれた。そんな大きいサイズにはならないし、そのくせ歴史的経緯が多くて面倒な部分があるし、optionalとかoneofとかシンプルにめんどくさい仕様もあって、好奇心を雑に満たすにはwireはいい対象なんじゃないかな