/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ @ file : Jvm Name (" Rx DataStore ") Ċ Ċ package Ġandroidx . datastore . rx java 3 Ċ Ċ import Ġandroidx . datastore . core . DataStore Ċ import Ġio . reactivex . rx java 3 . core . Flow able Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġio . reactivex . rx java 3 . functions . Function Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . rx 3 . as Flow able Ċ import Ġkotlinx . coroutines . rx 3 . as Single Ċ import Ġkotlinx . coroutines . rx 3 . await Ċ Ċ /** Ċ Ġ* ĠGets Ġa Ġre activ ex . Flow able Ġof Ġthe Ġdata Ġfrom ĠData Store . ĠSee Ġ[ DataStore . data ] Ġfor Ġmore Ġinformation . Ċ Ġ* Ċ Ġ* ĠProvides Ġefficient , Ġcached Ġ( when Ġpossible ) Ġaccess Ġto Ġthe Ġlatest Ġdur ably Ġpersisted Ġstate . Ċ Ġ* ĠThe Ġflow Ġwill Ġalways Ġeither Ġemit Ġa Ġvalue Ġor Ġthrow Ġan Ġexception Ġencountered Ġwhen Ġattempting Ċ Ġ* Ġto Ġread Ġfrom Ġdisk . ĠIf Ġan Ġexception Ġis Ġencountered , Ġcollecting Ġagain Ġwill Ġattempt Ġto Ġread Ġthe Ċ Ġ* Ġdata Ġagain . Ċ Ġ* Ċ Ġ* ĠDo Ġnot Ġlayer Ġa Ġcache Ġon Ġtop Ġof Ġthis ĠAPI : Ġit Ġwill Ġbe Ġbe Ġimpossible Ġto Ġguarantee Ġconsistency . Ċ Ġ* ĠInstead , Ġuse Ġdata . first () Ġto Ġaccess Ġa Ġsingle Ġsnapshot . Ċ Ġ* Ċ Ġ* ĠThe ĠFlow able Ġwill Ġcomplete Ġwith Ġan ĠIOException Ġwhen Ġan Ġexception Ġis Ġencountered Ġwhen Ġreading Ċ Ġ* Ġdata . Ċ Ġ* Ċ Ġ* Ġ@ return Ġa Ġflow Ġrepresenting Ġthe Ġcurrent Ġstate Ġof Ġthe Ġdata Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ public Ġfun Ġ< T Ġ: ĠAny > ĠData Store < T >. data (): ĠFlow able < T > Ġ{ ĊĠĠĠ Ġreturn Ġthis . data . as Flow able () Ċ } Ċ Ċ /** Ċ Ġ* ĠSee Ġ[ DataStore . update Data ] Ċ Ġ* Ċ Ġ* ĠUpdates Ġthe Ġdata Ġtransaction ally Ġin Ġan Ġatomic Ġread - modify - write Ġoperation . ĠAll Ġoperations Ċ Ġ* Ġare Ġserialized , Ġand Ġthe Ġtransform Ġitself Ġis Ġa Ġasync Ġso Ġit Ġcan Ġperform Ġheavy Ġwork Ċ Ġ* Ġsuch Ġas ĠRPC s . Ċ Ġ* Ċ Ġ* ĠThe ĠSingle Ġcompletes Ġwhen Ġthe Ġdata Ġhas Ġbeen Ġpersisted Ġdur ably Ġto Ġdisk Ġ( after Ġwhich Ċ Ġ* Ġ[ data ] Ġwill Ġreflect Ġthe Ġupdate ). ĠIf Ġthe Ġtransform Ġor Ġwrite Ġto Ġdisk Ġfails , Ġthe Ċ Ġ* Ġtransaction Ġis Ġaborted Ġand Ġthe Ġreturned ĠSingle Ġis Ġcompleted Ġwith Ġthe Ġerror . Ċ Ġ* Ċ Ġ* ĠThe Ġtransform Ġwill Ġbe Ġrun Ġon Ġthe Ġscheduler Ġthat ĠData Store Ġwas Ġconstructed Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġsnapshot Ġreturned Ġby Ġthe Ġtransform Ċ Ġ* Ġ@ throws ĠException Ġwhen Ġthrown Ġby Ġthe Ġtransform Ġfunction Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ public Ġfun Ġ< T Ġ: ĠAny > ĠData Store < T >. update Data Async ( transform : ĠFunction < T , ĠSingle < T >> ): ĠSingle < T > Ġ{ ĊĠĠĠ Ġreturn ĠCor outine Scope ( Dispatch ers . Un conf ined ). async Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ update Data Async . update Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform . apply ( it ). await () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. as Single ( Dispatch ers . Un conf ined ) Ċ } Ċ