package Ġnl . z ien it . functional Ċ Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . is Super class Of Ċ Ċ sealed Ġclass ĠTry < T > Ġ{ ĊĊĠĠĠ Ġabstract Ġfun Ġis Success (): ĠBoolean ĊĠĠĠ Ġabstract Ġfun Ġis Failure (): ĠBoolean ĊĠĠĠ Ġabstract Ġfun Ġget (): ĠT ĊĠĠĠ Ġabstract Ġfun Ġget Exception (): ĠThrowable ĊĠĠĠ Ġfun Ġget OrElse ( other : ĠT ): ĠT Ġ= Ġif ( this . is Success ()) Ġthis . get () Ġelse Ġother ĊĠĠĠ Ġfun Ġget OrNull (): ĠT ? Ġ= Ġif ( this . is Success ()) Ġthis . get () Ġelse Ġnull ĊĠĠĠ Ġabstract Ġfun Ġ< U > Ġmap ( mapper : Ġ( T ) Ġ-> ĠU ): ĠTry < U > ĊĠĠĠ Ġabstract Ġfun Ġ< U > Ġflat Map ( mapper : Ġ( T ) Ġ-> ĠTry < out ĠU >): ĠTry < U > ĊĠĠĠ Ġabstract Ġfun Ġfilter ( predicate : Ġ( T ) Ġ-> ĠBoolean ): ĠTry < T > ĊĠĠĠ Ġabstract Ġfun Ġrecover ( mapper : Ġ( Throwable ) Ġ-> ĠT ): ĠTry < T > ĊĠĠĠ Ġabstract Ġfun Ġ< E Ġ: ĠThrowable > Ġrecover ( clazz : ĠK Class < E >, Ġmapper : Ġ( E ) Ġ-> ĠT ): ĠTry < T > ĊĠĠĠ Ġabstract Ġfun Ġrecover With ( mapper : Ġ( Throwable ) Ġ-> ĠTry < T >): ĠTry < T > ĊĠĠĠ Ġabstract Ġfun Ġ< E Ġ: ĠThrowable > Ġrecover With ( clazz : ĠK Class < E >, Ġmapper : Ġ( E ) Ġ-> ĠTry < T >): ĠTry < T > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġ< U > Ġeval ( lambda : Ġ() Ġ-> ĠTry < U >): ĠTry < U > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . failure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< U > Ġof ( lambda : Ġ() Ġ-> ĠU ): ĠTry < U > Ġ= Ġeval Ġ{ Ġlambda (). success () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSuccess < T >( val Ġvalue : ĠT ) Ġ: ĠTry < T >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Success (): ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Failure (): ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠT Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Exception (): ĠThrowable Ġ= Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< U > Ġmap ( mapper : Ġ( T ) Ġ-> ĠU ): ĠTry < U > Ġ= Ġeval Ġ{ ĠSuccess ( mapper ( value )) Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< U > Ġflat Map ( mapper : Ġ( T ) Ġ-> ĠTry < out ĠU >): ĠTry < U > Ġ= Ġeval Ġ{ Ġmapper ( value ) Ġas ĠTry < U > Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( predicate : Ġ( T ) Ġ-> ĠBoolean ): ĠTry < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeval Ġ{ Ġif Ġ( predicate ( value )) Ġthis Ġelse ĠFailure < T >( NoSuch ElementException ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecover ( mapper : Ġ( Throwable ) Ġ-> ĠT ): ĠTry < T > Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< E Ġ: ĠThrowable > Ġrecover ( clazz : ĠK Class < E >, Ġmapper : Ġ( E ) Ġ-> ĠT ): ĠTry < T > Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecover With ( mapper : Ġ( Throwable ) Ġ-> ĠTry < T >): ĠTry < T > Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< E Ġ: ĠThrowable > Ġrecover With ( clazz : ĠK Class < E >, Ġmapper : Ġ( E ) Ġ-> ĠTry < T >): ĠTry < T > Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFailure < T >( val Ġex : ĠThrowable ) Ġ: ĠTry < T >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Success (): ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Failure (): ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠT Ġ= Ġthrow Ġex ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Exception (): ĠThrowable Ġ= Ġex ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< U > Ġmap ( mapper : Ġ( T ) Ġ-> ĠU ): ĠTry < U > Ġ= Ġthis Ġas ĠTry < U > ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< U > Ġflat Map ( mapper : Ġ( T ) Ġ-> ĠTry < out ĠU >): ĠTry < U > Ġ= Ġthis Ġas ĠTry < U > ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( predicate : Ġ( T ) Ġ-> ĠBoolean ): ĠTry < T > Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecover ( mapper : Ġ( Throwable ) Ġ-> ĠT ): ĠTry < T > Ġ= Ġeval Ġ{ ĠSuccess ( mapper ( ex )) Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< E Ġ: ĠThrowable > Ġrecover ( clazz : ĠK Class < E >, Ġmapper : Ġ( E ) Ġ-> ĠT ): ĠTry < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeval Ġ{ Ġif Ġ( clazz . is Super class Of ( ex :: class )) ĠSuccess ( mapper ( ex Ġas ĠE )) Ġelse Ġthis Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecover With ( mapper : Ġ( Throwable ) Ġ-> ĠTry < T >): ĠTry < T > Ġ= Ġeval Ġ{ Ġmapper ( ex ) Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< E Ġ: ĠThrowable > Ġrecover With ( clazz : ĠK Class < E >, Ġmapper : Ġ( E ) Ġ-> ĠTry < T >): ĠTry < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeval Ġ{ Ġif Ġ( clazz . is Super class Of ( ex :: class )) Ġmapper ( ex Ġas ĠE ) Ġelse Ġthis Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠT . success (): ĠTry < T > Ġ= ĠTry . Success ( this ) Ċ fun Ġ< T > ĠThrowable . failure (): ĠTry < T > Ġ= ĠTry . Failure < T >( this ) Ċ Ċ fun Ġ< T > ĠSequence < Try < T >> . to Try List (): ĠTry < List < T >> Ġ{ ĊĠĠĠ Ġreturn Ġto Collection ( this . as Iterable (), Ġmutable ListOf < T >()) Ġas ĠTry < List < T >> Ċ } Ċ Ċ fun Ġ< T > ĠCollection < Try < T >> . to Try List (): ĠTry < List < T >> Ġ{ ĊĠĠĠ Ġreturn Ġto Collection ( this . as Iterable (), Ġmutable ListOf < T >()) Ġas ĠTry < List < T >> Ċ } Ċ Ċ private Ġfun Ġ< T > Ġto Collection ( from : ĠIterable < Try < T >>, Ġto : ĠMutable Collection < T >): ĠTry < out ĠCollection < T >> Ġ{ ĊĠĠĠ Ġfor Ġ( item Ġin Ġfrom ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . is Failure ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitem Ġas ĠTry . Failure < List < T >> ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġto . add ( item . get ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġto . success () Ċ } Ċ