SpanJson用の F# 拡張ライブラリを作った
SpanJson という新手のJSONシリアライザが今年になって登場していたので、調査がてらに F# 拡張を作りました。
https://github.com/pocketberserker/SpanJson.FSharp.Formatter
https://www.nuget.org/packages/SpanJson.FSharp.Formatter/0.1.0
SpanJson自体が.NETCoreApp 2.1でしか使えない上に F# 向けライブラリなので使う人皆無な気がしていますが、SpanJsonに詳しくなったのでよしとしましょう。
0.1.0で対応しているのは以下の型です。
- option
- voption
- list
- map
- record
- struct record
setは既存実装のままでシリアライズ、デシリアライズできるので自前で用意しませんでした。 判別共用体は例によって必要性がまだわかないので未対応です。 あとはvoption対応のために FSharp.Core を 4.5以上に強制しています、各位新しいバージョンを使っていきましょう。
SpanJsonはUtf8Jsonと似ているようでところどころ違うのが面白いですね、個人的にはUtf8JsonのAPIのほうが好み(というか単純に実装しやすい)と思いましたが。 Resolverの伝搬を型パラメータで行うの結構大変な気がするのですがそこらへんどうなんでしょう…?
あとはSpanJsonでクラスや構造体をシリアライズ、デシリアライズする際はデフォルトかattributeを付けたコンストラクタでなければならない縛りはちょっと地味に厳しいかも? これの関係でrecordはシリアライズできるけどデシリアライズできないという状態になったので、外部ライブラリの型をシリアライズしようとするときに色々書く羽目になるかもしれません。
そういえばこのライブラリを開発する際に C# 7.3 を使ったのですがout var
とか便利ですね…という気持ちになりました。