package Ġio . github . gm val ent ino 8 . github . sample . presentation . core . middleware Ċ Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . core . contract . Action Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . core . contract . Contract Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . core . contract . Event Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . core . contract . Intent Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . core . contract . Result Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . core . contract . State Ċ import Ġio . github . gm val ent ino 8 . github . sample . presentation . core . contract . ViewState Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . on Each Ċ Ċ /** Ċ Ġ* ĠLogging Ġmiddleware Ċ Ġ* Ċ Ġ* ĠMiddleware Ġto Ġlog Ġstate Ġmachine Ġinputs / outputs Ċ Ġ*/ Ċ class ĠLogging Middleware < I Ġ: ĠIntent , ĠA Ġ: ĠAction , ĠR Ġ: ĠResult , ĠVS Ġ: ĠView State , ĠE Ġ: ĠEvent >( ĊĠĠĠ Ġprivate Ġval Ġverbose : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġprivate Ġval Ġintent Prefix : ĠString Ġ= Ġ" Intent :", ĊĠĠĠ Ġprivate Ġval Ġaction Prefix : ĠString Ġ= Ġ" Action :", ĊĠĠĠ Ġprivate Ġval Ġresult Prefix : ĠString Ġ= Ġ" Result :", ĊĠĠĠ Ġprivate Ġval Ġstate Prefix : ĠString Ġ= Ġ" State :", ĊĠĠĠ Ġprivate Ġval Ġlog : Ġ( message : ĠString ) Ġ-> ĠUnit , Ċ ) Ġ: ĠIntent Middleware < I , ĠVS , ĠE >, ĠAction Middleware < A , ĠVS , ĠE >, ĠResult Middleware < R , ĠVS , ĠE >, ĠState Middleware < VS , ĠE > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmodify Intent s ( input : ĠFlow < I >, Ġstate : ĠState Flow < State < VS , ĠE >> ): ĠFlow < I > Ġ= Ġinput . on Each Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠ Ġlog ("$ intent Prefix Ġ${ intent . message () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmodify Actions ( input : ĠFlow < A >, Ġstate : ĠState Flow < State < VS , ĠE >> ): ĠFlow < A > Ġ= Ġinput . on Each Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġlog ("$ action Prefix Ġ${ action . message () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmodify Results ( input : ĠFlow < R >, Ġstate : ĠState Flow < State < VS , ĠE >> ): ĠFlow < R > Ġ= Ġinput . on Each Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠ Ġlog ("$ result Prefix Ġ${ result . message () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmodify States ( input : ĠFlow < State < VS , ĠE >> ): ĠFlow < State < VS , ĠE >> Ġ= Ġinput . on Each Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġlog ("$ state Prefix Ġ${ state . message () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠContract . message (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( verbose ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtoString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠState < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view State :: class . simple Name Ġ?: ĠtoString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: class . simple Name Ġ?: ĠtoString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ