/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠB ab ylon ĠPart ners ĠLimited Ċ Ġ* ĠĠĊ Ġ* Ġ Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . babylon . orbit Ċ Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Flow Preview Ċ import Ġkotlinx . coroutines . channels . Broadcast Channel Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . channels . Con fl ated Broadcast Channel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . as Flow Ċ import Ġkotlinx . coroutines . flow . flatMap Latest Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . onStart Ċ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ class ĠBase Orbit Container < STATE Ġ: ĠAny , ĠS IDE _ EFFECT Ġ: ĠAny >( ĊĠĠĠ Ġmiddleware : ĠMiddleware < STATE , ĠS IDE _ EFFECT > Ċ ) Ġ: ĠOr bit Container < STATE , ĠS IDE _ EFFECT > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstate Ġ= ĠCon fl ated Broadcast Channel ( middleware . initialState ). as Flow () ĊĠĠĠ Ġprivate Ġval Ġinput Ġ= ĠBroadcast Channel < Any >( Channel . BUFFER ED ) Ġ// ĠCreates Ġa ĠBuffered ĠBroadcast Ġchannel Ġwith Ġdefault Ġbuffer Ġsize ĊĠĠĠ Ġoverride Ġval Ġside Effect : ĠFlow < SIDE _ EFFECT > Ġ= Ġmiddleware . side Effect ĊĠĠĠ Ġoverride Ġval Ġorbit : ĠFlow < STATE > ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġorbit Ġ= Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onStart Ġ{ Ġemit ( Lifecycle Action . Created ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Latest Ġ{ Ġinput Ġ-> Ġstate . map Ġ{ Ġstate Ġ-> ĠAction State ( state , Ġinput ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build Orbit Flow ( middleware ) Ġ{ Ġinput . send ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsend Action ( action : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . send ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose Orbit () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . cancel () ĊĠĠĠ Ġ} Ċ } Ċ