/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠTw ilio Ġ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 . tw ilio . verify . threading Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġcom . tw ilio . verify . Tw ilio Verify Exception Ċ import Ġjava . util . concurrent . ExecutorService Ċ import Ġjava . util . concurrent . Executors Ċ Ċ type alias ĠSafe Success Result < T > Ġ= Ġ( T ) Ġ-> ĠUnit Ċ type alias ĠSafe Error < E > Ġ= Ġ( E ) Ġ-> ĠUnit Ċ type alias ĠSafe Success Ġ= Ġ() Ġ-> ĠUnit Ċ Ċ private Ġval ĠexecutorService : ĠExecutor Service Ġ= ĠExec utors . new Fixed ThreadPool ( 1 0 ) Ċ Ċ internal Ġfun Ġ< T > Ġexecute ( ĊĠ Ġsuccess : Ġ( T ) Ġ-> ĠUnit , ĊĠ Ġerror : Ġ( Tw ilio Verify Exception ) Ġ-> ĠUnit , ĊĠ Ġblock : Ġ( on Success : ĠSafe Success Result < T >, ĠonError : ĠSafe Error < Tw ilio Verify Exception >) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ ĠexecutorService . execute ( Task ( block , Ġsuccess , Ġerror )) Ċ } Ċ Ċ internal Ġfun Ġexecute ( ĊĠ Ġsuccess : Ġ() Ġ-> ĠUnit , ĊĠ Ġerror : Ġ( Tw ilio Verify Exception ) Ġ-> ĠUnit , ĊĠ Ġblock : Ġ( on Success : ĠSafe Success , ĠonError : ĠSafe Error < Tw ilio Verify Exception >) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ ĠexecutorService . execute ( ĊĠĠĠ ĠTask < Unit , ĠTw ilio Verify Exception >( ĊĠĠĠĠĠ Ġ{ ĠonSuccess , ĠonError Ġ-> ĊĠĠĠĠĠĠĠ Ġblock ( ĊĠĠĠĠĠĠĠĠĠ Ġ{ ĠonSuccess ( Unit ) Ġ}, ĊĠĠĠĠĠĠĠĠĠ ĠonError ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ Ġsuccess () Ġ}, Ġerror ĊĠĠĠ Ġ) ĊĠ Ġ) Ċ } Ċ Ċ internal Ġclass ĠTask < T , ĠE Ġ: ĠException >( ĊĠ Ġprivate Ġval Ġblock : Ġ( on Success : ĠSafe Success Result < T >, ĠonError : ĠSafe Error < E >) Ġ-> ĠUnit , ĊĠ Ġprivate Ġval Ġsuccess : Ġ( T ) Ġ-> ĠUnit , ĊĠ Ġprivate Ġval Ġerror : Ġ( E ) Ġ-> ĠUnit , ĊĠ Ġprivate Ġval Ġhandler : ĠHandler ? Ġ= ĠL ooper . my Looper () ĊĠĠĠ Ġ? . take If Ġ{ Ġit Ġ== ĠL ooper . get Main Looper () Ġ} ĊĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠ ĠHandler ( it ) ĊĠĠĠ Ġ} Ċ ) Ġ: ĠRunnable Ġ{ ĊĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠ Ġblock (:: safe Success , Ġ:: safe Error ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsafe Success ( result : ĠT ) Ġ{ ĊĠĠĠ Ġhandler ?. let Ġ{ ĊĠĠĠĠĠ Ġhandler . post Ġ{ Ġsuccess ( result ) Ġ} ĊĠĠĠ Ġ} Ġ?: Ġrun Ġ{ Ġsuccess ( result ) Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsafe Error ( exception : ĠE ) Ġ{ ĊĠĠĠ Ġhandler ?. let Ġ{ ĊĠĠĠĠĠ Ġhandler . post Ġ{ Ġerror ( exception ) Ġ} ĊĠĠĠ Ġ} Ġ?: Ġrun Ġ{ Ġerror ( exception ) Ġ} ĊĠ Ġ} Ċ } Ċ