Skip to content

TypeMapを強化してカスタムデコーダを指定できるようにする#35

Merged
omochi merged 7 commits intomainfrom
full-type-map
Nov 28, 2022
Merged

TypeMapを強化してカスタムデコーダを指定できるようにする#35
omochi merged 7 commits intomainfrom
full-type-map

Conversation

@omochi
Copy link
Owner

@omochi omochi commented Nov 27, 2022

それと同時に、アーキテクチャとAPIの刷新を行った。

従来、 CodeGenerator は複数の type を引数に取る関数を提供していた。
その実装内部では、それら様々な関数の都合に応じて、動的なキャストをしていた。

これらはSwiftでの 型の種類 に応じて、生成時に様々な考慮が生じるためだが、
実装が各所に散らばってしまって見通しが悪かった。

そこで、型の種類に応じて処理が変化する部分を TypeConverter protocol に切り出して、
CodeGenerator は型に応じた TypeConverter を提供する役割にした。
これまでの、型を引数に取る様々な関数は、
TypeConverter のメソッドに移し替えた。

その結果、型の種類による分岐はその TypeConverter を生成する箇所に集約して、
個別の生成ロジックではそのような分岐を排除する事ができた。

この設計の元では、 TypeMap の機能は、特殊な専用の TypeConverter を提供するものと整理できる。
それを TypeMapConverter として実装した。
これによって、 TypeMap がどのように生成系の干渉しているのかが見やすくひとまとめにできた。

その後、カスタムデコーダを指定する機能を簡単に実装する事ができた。

また、カスタムの TypeConverter を注入するAPIを開放した。
全く異なるJSON化戦略を導入することもできるようになった。

@omochi
Copy link
Owner Author

omochi commented Nov 28, 2022

エンコードの実装を見据えてHasDecodeを分離した

@omochi omochi merged commit 1432e1d into main Nov 28, 2022
@omochi omochi deleted the full-type-map branch November 28, 2022 08:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant