/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠV lad im ir ĠS it nik ov Ġ< sit nik ov . vl ad im ir @ gmail . com > Ċ Ġ* Ċ Ġ* Ġ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 . github . bur run an . gradle . github Ċ Ċ import Ġactions . core . getState Ċ import Ġactions . core . save State Ċ Ċ interface ĠMutable State Variable < T Ġ: ĠAny > Ġ{ ĊĠĠĠ Ġfun Ġset ( value : ĠT ) Ċ } Ċ Ċ open Ġclass ĠBase State Variable < T Ġ: ĠAny >( protected Ġval Ġname : ĠString ) Ġ: ĠMutable State Variable < T > Ġ{ ĊĠĠĠ Ġprotected Ġvar Ġvalue : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġset ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġsave State ( name , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠS us pending State Variable < T Ġ: ĠAny > Ġ: ĠMutable State Variable < T > Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġget (): ĠT Ċ } Ċ Ċ class ĠDefault Sus pending State Variable ( name : ĠString , Ġval Ġdefault : Ġsuspend Ġ() Ġ-> ĠString ) Ġ: ĊĠĠĠ ĠBase State Variable < String >( name ), ĠS us pending State Variable < String > Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġvalue Ġ?: ĠgetState ( name ). if Blank Ġ{ Ġdefault () Ġ}. also Ġ{ Ġset ( it ) Ġ} Ċ } Ċ Ċ interface ĠState Variable < T Ġ: ĠAny > Ġ: ĠMutable State Variable < T > Ġ{ ĊĠĠĠ Ġfun Ġget (): ĠT Ċ } Ċ Ċ class ĠDefault State Variable ( name : ĠString , Ġprivate Ġval Ġdefault : Ġ() Ġ-> ĠString ) Ġ: ĊĠĠĠ ĠBase State Variable < String >( name ), ĠState Variable < String > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġvalue Ġ?: ĠgetState ( name ). if Blank Ġ{ Ġdefault () Ġ}. also Ġ{ Ġset ( it ) Ġ} Ċ } Ċ Ċ fun Ġsus pending State Variable ( name : ĠString , Ġdefault : Ġsuspend Ġ() Ġ-> ĠString ): ĠS us pending State Variable < String > Ġ= ĊĠĠĠ ĠDefault Sus pending State Variable ( name , Ġdefault ) Ċ Ċ fun Ġstate Variable ( name : ĠString , Ġdefault : Ġ() Ġ-> ĠString Ġ= Ġ{ Ġ"" Ġ}): ĠState Variable < String > Ġ= ĊĠĠĠ ĠDefault State Variable ( name , Ġdefault ) Ċ Ċ fun Ġ< T Ġ: ĠAny , ĠR Ġ: ĠAny > ĠState Variable < T >. transform ( decode : Ġ( T ) Ġ-> ĠR , Ġencode : Ġ( R ) Ġ-> ĠT ) Ġ= Ġobject Ġ: ĠState Variable < R > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget (): ĠR Ġ= Ġdecode ( this @ transform . get ()) ĊĊĠĠĠ Ġoverride Ġfun Ġset ( value : ĠR ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ transform . set ( encode ( value )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠState Variable < String >. to Boolean () Ġ= Ġtransform ({ Ġit Ġ== Ġ" Y " Ġ}, Ġ{ Ġif Ġ( it ) Ġ" Y " Ġelse Ġ" N " Ġ}) Ċ fun ĠState Variable < String >. toInt ( default : ĠInt ) Ġ= Ġtransform ({ Ġif Ġ( it . isBlank ()) Ġdefault Ġelse Ġit . toInt () Ġ}, Ġ{ Ġit . toString () Ġ}) Ċ fun ĠState Variable < String >. to Long ( default : ĠLong ) Ġ= Ġtransform ({ Ġif Ġ( it . isBlank ()) Ġdefault Ġelse Ġit . to Long () Ġ}, Ġ{ Ġit . toString () Ġ}) Ċ