networkCache = Cache.fromRetrofit { id: Int -> service.getPerson(id) } val baseDiskCache: Cache<String, String> = Cache.fromDiskLruCache(DiskLruCache.open(cacheDir, 0, 1, 20)) val diskCache = baseDiskCache.keyTransformer<Int> { it.toString() } .valueTransformer(JSONSerializer( Person::class.serializer())) val memoryCache = Cache.createLruCache<Int, Person>(5) return memoryCache .compose(diskCache) .compose(networkCache) .reuseInflight() }