タイトル長げーよ!!!
https://github.com/xuwei-k/play-twenty-three
以前書いたもの
252要素のcase classまでのplayframeworkのJsonのReadsやWritesやFormatを生成できるライブラリ作った
を、色々カスタマイズ可能にしてsbt pluginにしました。以前つくったものは、1から252まですべてのReads, Writes, Format用のメソッドという超大量のボイラプレートなコードを生成していたわけですが、
「バイナリサイズが11MB」
という残念な感じになっていました。たとえば大概は252なんて必要なくて、
「25要素のformatと、27要素のreads用メソッドが欲しいだけなんだけどな―」
という程度の需要でしょう。というわけで、必要なメソッドだけをユーザー側で生成するためのsbt pluginにしました。設定可能なのは
- case classの要素数
- 要素数は、範囲とか、最大いくつまで、という指定方法のみならず、「25と28」などと、直接個別指定まで可能
- readsのみか、writesのみか、format含めて全部か?
- それぞれのclass名、メソッド名、オブジェクト名、パッケージ名
- ビルダーのclassがfinalか?case classか?
など、思いつく箇所は(あまり必要なさそうなところ含めて)だいたい全部カスタマイズ可能にしておきました。ただ、メソッド名や、内部用のBuilderのclass名は普通どうでもよく、一番カスタマイズしたいのは、case classの要素数だと思うので、カスタマイズしたいであろうものだけを指定しやすいように、少しはヘルパーメソッド追加してあります。が、そのあたりはそれほど丁寧に書いてないし、少しわかりにくいかもしれません。
あとはこのあたり https://github.com/xuwei-k/play-twenty-three/tree/v0.1.2/generator/src/main/scala のソース読むか、どうしてもわからなかったら直接聞いてください。
sbt pluginなので、その部分はもちろんScala2.10で書くしかないわけですが、sbt関係ないコード生成部分はできるだけ切り離して、別のモジュールになっていて、そちらはScala2.10と2.11でcross buildしてpublishしてあります。
あとは、
他のJsonライブラリについても、気が向いたら似たようなことやろう
and
これも気が向いたら、GAEからAPIで返す感じのものを作ろう・・・つくった