package Ġcom . sdk . growth book . Features Ċ Ċ import Ġcom . sdk . growth book . Utils . Constants Ċ import Ġcom . sdk . growth book . Utils . GB Error Ċ import Ġcom . sdk . growth book . Utils . GB Features Ċ import Ġcom . sdk . growth book . sandbox . Caching Impl Ċ import Ġcom . sdk . growth book . sandbox . getData Ċ import Ġcom . sdk . growth book . sandbox . put Data Ċ import Ġkotlinx . coroutines . Del icate Cor outines Api Ċ Ċ /** Ċ Ġ* ĠInterface Ġfor ĠFeature ĠAPI ĠCompletion ĠEvents Ċ Ġ*/ Ċ internal Ġinterface ĠFeatures Flow Delegate { ĊĠĠĠ Ġfun Ġfeatures F etched Successfully ( features Ġ: ĠGB Features , Ġis Remote : ĠBoolean ) ĊĠĠĠ Ġfun Ġfeatures Fetch Failed ( error : ĠGB Error , Ġis Remote : ĠBoolean ) Ċ } Ċ Ċ /** Ċ Ġ* ĠView ĠModel Ġfor ĠFeatures Ċ Ġ*/ Ċ internal Ġclass ĠFeatures ViewModel ( val Ġdelegate : ĠFeatures Flow Delegate , Ġval ĠdataSource Ġ: ĠFeatures DataSource Ġ= ĠFeatures DataSource ()) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠC aching ĠManager ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmanager Ġ= ĠC aching Impl ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFetch ĠFeatures ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Del icate Cor outines Api ĊĠĠĠ Ġfun Ġfetch Features (){ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfor Ġcache Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Model Ġ= Ġmanager . get Layer (). getData < Features DataModel >( Constants . feature Cache ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Model Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall ĠSuccess ĠDelegate Ġwith Ġmention Ġof Ġdata Ġavailable Ġbut Ġits Ġnot Ġremote ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . delegate . features F etched Successfully ( features Ġ= Ġdata Model . features , Ġis Remote Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error Ġ: ĠThrowable ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall ĠError ĠDelegate Ġwith Ġmention Ġof Ġdata Ġnot Ġavailable Ġbut Ġits Ġnot Ġremote ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . delegate . features Fetch Failed ( GB Error ( error ), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠdataSource . fetch Features ( success Ġ= Ġ{ data Model Ġ-> Ġprepare Features Data ( data Model Ġ= Ġdata Model )}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall ĠError ĠDelegate Ġwith Ġmention Ġof Ġdata Ġnot Ġavailable Ġbut Ġits Ġnot Ġremote ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . delegate . features Fetch Failed ( GB Error ( error ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCache ĠAPI ĠResponse Ġand Ġpush Ġsuccess Ġevent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprepare Features Data ( data Model Ġ: ĠFeatures DataModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . get Layer (). put Data ( Constants . feature Cache , Ġdata Model ) ĊĠĠĠĠĠĠĠ Ġ// ĠCall ĠSuccess ĠDelegate Ġwith Ġmention Ġof Ġdata Ġavailable Ġwith Ġremote ĊĠĠĠĠĠĠĠ Ġthis . delegate . features F etched Successfully ( features Ġ= Ġdata Model . features , Ġis Remote Ġ= Ġtrue ) ĊĠĠĠ Ġ} Ċ Ċ }