Kotlin Advent Calendar 12日目の代打です。
最近Coroutineの話題が多いですね。
でもRxJavaもよく使いますね。
さてそうなってくると、「ここはCoroutineとして使いたい…あっちはRxのStreamとして使いたい…」というのがあると思います。
個人的な結論
ArrowのRetrofitAdapter使いましょう。
Arrowってなんやねん、という人は別のAdventCalendarにいくつか記事を投稿しているので、そちらを参考にしてください。
雑サンプルコード
// コンパイルすら通してないから、もしかしたらミスっているかもだが、雰囲気で察してくれ
interface Service {
@GET("/path/to/api")
fun get() : CallK<MyResponse>
}
// 中略
val res = retrofit.create(Service::class.java).get()
val useDeferred: DeferredK<Response<MyResponse>> = res.async(DeferredK.async()).fix()
val useSingleK: SingleK<Response<MyResponse>> = res.async(SingleK.async()).fix()
DeferredKはDeferredをDelegateしているので、そのままDeferredとして使えます。
SingleKはそうはなっていないので、他のStreamと混ぜたり、Subscribeする必要があるときはuseSingleK.single
のように利用すればOKです。
これで、RxとCoroutineがいりじまった場合にRetrofitの定義に困ることはありませんね、やったぜ!
reference
https://arrow-kt.io/docs/integrations/retrofit/
https://github.com/arrow-kt/arrow/tree/0.8.1/modules/integrations/arrow-integrations-retrofit-adapter