/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠSquare ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . squareup . workflow 1 Ċ Ċ import Ġcom . squareup . workflow 1 . Workflow Interceptor . Workflow Session Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Job Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Workflow Interceptor ] Ġthat Ġjust Ġprints Ġall Ġmethod Ġcalls Ġusing Ġ[ log ]. Ċ Ġ*/ Ċ @ Opt In ( Experimental Workflow Api :: class ) Ċ open Ġclass ĠSimple Logging Workflow Interceptor Ġ: ĠWorkflow Interceptor Ġ{ ĊĠ Ġoverride Ġfun Ġon Session Started ( ĊĠĠĠ Ġworkflow Scope : ĠCor outine Scope , ĊĠĠĠ Ġsession : ĠWorkflow Session ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġlog Begin (" on Instance Started ($ workflow Scope , Ġ$ session )") ĊĠĠĠ Ġworkflow Scope . coroutine Context [ Job ] !!. invoke On Completion Ġ{ ĊĠĠĠĠĠ Ġlog End (" on Instance Started ($ session )") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< P , ĠS > Ġon InitialState ( ĊĠĠĠ Ġprops : ĠP , ĊĠĠĠ Ġsnapshot : ĠSnapshot ?, ĊĠĠĠ Ġproceed : Ġ( P , ĠSnapshot ?) Ġ-> ĠS , ĊĠĠĠ Ġsession : ĠWorkflow Session ĊĠ Ġ): ĠS Ġ= Ġlog Method (" on InitialState ", Ġprops , Ġsnapshot , Ġsession ) Ġ{ ĊĠĠĠ Ġproceed ( props , Ġsnapshot ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< P , ĠS > Ġon Props Changed ( ĊĠĠĠ Ġold : ĠP , ĊĠĠĠ Ġnew : ĠP , ĊĠĠĠ Ġstate : ĠS , ĊĠĠĠ Ġproceed : Ġ( P , ĠP , ĠS ) Ġ-> ĠS , ĊĠĠĠ Ġsession : ĠWorkflow Session ĊĠ Ġ): ĠS Ġ= Ġlog Method (" on Props Changed ", Ġold , Ġnew , Ġstate , Ġsession ) Ġ{ ĊĠĠĠ Ġproceed ( old , Ġnew , Ġstate ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< P , ĠS , ĠO , ĠR > Ġon Render ( ĊĠĠĠ Ġprops : ĠP , ĊĠĠĠ Ġstate : ĠS , ĊĠĠĠ Ġcontext : ĠBase Render Context < P , ĠS , ĠO >, ĊĠĠĠ Ġproceed : Ġ( P , ĠS , ĠBase Render Context < P , ĠS , ĠO >) Ġ-> ĠR , ĊĠĠĠ Ġsession : ĠWorkflow Session ĊĠ Ġ): ĠR Ġ= Ġlog Method (" on Render ", Ġprops , Ġstate , Ġsession ) Ġ{ ĊĠĠĠ Ġproceed ( props , Ġstate , Ġcontext ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< S > Ġon Snapshot State ( ĊĠĠĠ Ġstate : ĠS , ĊĠĠĠ Ġproceed : Ġ( S ) Ġ-> ĠSnapshot ?, ĊĠĠĠ Ġsession : ĠWorkflow Session ĊĠ Ġ): ĠSnapshot ? Ġ= Ġlog Method (" on Snapshot State ", Ġstate , Ġsession ) Ġ{ ĊĠĠĠ Ġproceed ( state ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġinline Ġfun Ġ< T > Ġlog Method ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġvar arg Ġargs : ĠAny ?, ĊĠĠĠ Ġblock : Ġ() Ġ-> ĠT ĊĠ Ġ): ĠT Ġ{ ĊĠĠĠ Ġval Ġtext Ġ= Ġ"$ name (${ args . join ToString () })" ĊĠĠĠ Ġlog Begin ( text ) ĊĠĠĠ Ġreturn Ġblock (). also Ġ{ ĊĠĠĠĠĠ Ġlog End ("$ text Ġ= Ġ$ it ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCalled Ġwith Ġdescriptions Ġof Ġevery Ġevent . ĠDefault Ġimplementation Ġjust Ġcalls Ġ[ log ]. ĊĠĠ Ġ*/ ĊĠ Ġprotected Ġopen Ġfun Ġlog Begin ( text : ĠString ) Ġ{ ĊĠĠĠ Ġlog (" START | Ġ$ text ") ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCalled Ġwith Ġdescriptions Ġof Ġevery Ġevent . ĠDefault Ġimplementation Ġjust Ġcalls Ġ[ log ]. ĊĠĠ Ġ*/ ĊĠ Ġprotected Ġopen Ġfun Ġlog End ( text : ĠString ) Ġ{ ĊĠĠĠ Ġlog (" Ġ ĠEND | Ġ$ text ") ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCalled Ġby Ġ[ log Begin ] Ġand Ġ[ log End ] Ġto Ġdisplay Ġa Ġlog Ġmessage . ĊĠĠ Ġ*/ ĊĠ Ġprotected Ġopen Ġfun Ġlog ( text : ĠString ) Ġ{ ĊĠĠĠ Ġprintln ( text ) ĊĠ Ġ} Ċ } Ċ