/* Ċ Ġ* ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠNB CO ĠY oo Money ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ċ Ġ* Ġassociated Ġdocumentation Ġfiles Ġ( the ĠâĢľ Software âĢĿ ), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ċ Ġ* Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ċ Ġ* Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ċ Ġ* Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ċ Ġ* Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED ĠâĢľ AS ĠIS âĢĿ, ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , Ċ Ġ* ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR Ċ Ġ* ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT Ċ Ġ* ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR Ċ Ġ* ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġru . y oom oney . sdk . k assa . payments . tokenize Ċ Ċ import Ġru . y oom oney . sdk . m arch . Logic Ċ import Ġru . y oom oney . sdk . m arch . Out Ċ import Ġru . y oom oney . sdk . m arch . input Ċ import Ġru . y oom oney . sdk . m arch . output Ċ import Ġru . y oom oney . sdk . k assa . payments . tokenize . Token ize . State Ċ import Ġru . y oom oney . sdk . k assa . payments . tokenize . Token ize . Action Ċ import Ġru . y oom oney . sdk . k assa . payments . tokenize . Token ize . Effect Ċ Ċ internal Ġclass ĠToken ize Business Logic ( ĊĠĠĠ Ġval Ġshow State : Ġsuspend Ġ( State ) Ġ-> ĠAction , ĊĠĠĠ Ġval Ġshow Effect : Ġsuspend Ġ( Effect ) Ġ-> ĠUnit , ĊĠĠĠ Ġval Ġsource : Ġsuspend Ġ() Ġ-> ĠAction , ĊĠĠĠ Ġprivate Ġval Ġtokenize UseCase : ĠToken ize UseCase Ċ ) Ġ: ĠLogic < State , ĠAction > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( state : ĠState , Ġaction : ĠAction ): ĠOut < State , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ Ġwhen ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState . Start Ġ-> Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAction . Token ize Ġ-> Ġ ĠOut ( State . Token ize ( action . tokenize Input Model )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġshow State ( this . state ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġtokenize UseCase . tokenize ( this . state . tokenize Input Model ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠOut . skip ( state , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState . Token ize Ġ-> Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAction . Payment Auth Required Ġ-> ĠOut ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġshow Effect ( Effect . Payment Auth Required ( action . charge , Ġstate . tokenize Input Model . allow Wallet Link ing Ġ?: Ġfalse )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAction . Payment Auth Success Ġ-> ĠOut ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġtokenize UseCase . tokenize ( this . state . tokenize Input Model ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAction . Payment Auth Cancel Ġ-> ĠOut ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġshow State ( this . state ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġshow Effect ( Effect . Cancel Token ize ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAction . Token ize Success Ġ-> ĠOut ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeffect Ġ= ĠEffect . Token ize Complete ( action . content , Ġstate . tokenize Input Model . allow Wallet Link ing Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġshow Effect ( effect ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAction . Token ize Failed Ġ-> ĠOut ( State . Token ize Error ( state . tokenize Input Model , Ġaction . error )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġshow State ( this . state ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠOut . skip ( state , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState . Token ize Error Ġ-> Ġwhen ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAction . Token ize Ġ-> ĠOut ( State . Token ize ( action . tokenize Input Model )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġshow State ( this . state ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġtokenize UseCase . tokenize ( this . state . tokenize Input Model ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠOut . skip ( state , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }