package Ġjp . cor dea . sdk search architecture demo Ċ Ċ import Ġkotlinx . coroutines . experimental . channels . Con fl ated Broadcast Channel Ċ import Ġkotlinx . coroutines . experimental . channels . Receive Channel Ċ import Ġkotlinx . coroutines . experimental . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠColor Synchron izer Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġremote DataSource : ĠColor Remote DataSource Ċ ) Ġ{ ĊĠĠĠ Ġval Ġstate : ĠReceive Channel < Color State > Ġget () Ġ= Ġmutable State . open Subscription () ĊĠĠĠ Ġval Ġresult : ĠReceive Channel < Color Result > Ġget () Ġ= Ġmutable Result . open Subscription () ĊĊĠĠĠ Ġprivate Ġvar Ġcached State Ġ= ĠColor State () ĊĠĠĠ Ġprivate Ġvar Ġcached Item : ĠColor Fetch Result . Success ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġmutable State Ġ= ĠCon fl ated Broadcast Channel < Color State >() ĊĠĠĠ Ġprivate Ġval Ġmutable Result Ġ= ĠCon fl ated Broadcast Channel < Color Result >() ĊĊĠĠĠ Ġfun Ġsync ( action : ĠColor Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Action . Initialize Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( cached State . copy ( initialize Ġ= ĠSync State . SYNC )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Color () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠColor Action . Filter Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( cached State . copy ( filter Ġ= ĠSync State . SYNC )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Color ( action . query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Color () Ġ= Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġremote DataSource . try Fetch () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠColor Fetch Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Result . send ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Item Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( cached State . copy ( initialize Ġ= ĠSync State . COMPLETED )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Fetch Result . Failure Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( cached State . copy ( initialize Ġ= ĠSync State . FAILED )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Color ( query : ĠString ) Ġ= Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcached Item !! ĊĠĠĠĠĠĠĠ Ġmutable Result . send ( item . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= Ġitem . colors . filter Ġ{ Ġit . name . startsWith ( query ) Ġ} ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġupdate State ( cached State . copy ( filter Ġ= ĠSync State . COMPLETED )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate State ( state : ĠColor State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcached State Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġmutable State . offer ( cached State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠSync State Ġ{ ĊĠĠĠĠĠĠĠ ĠSY NC , ĊĠĠĠĠĠĠĠ ĠCOMP LETED , ĊĠĠĠĠĠĠĠ ĠFAILED ĊĠĠĠ Ġ} Ċ } Ċ