classOk(t.Generic[KT,KE],Result[KT,KE]):__value:KTdef__init__(self,value:KT):self.__value=valuedef__repr__(self):returnf"Result::Ok({self.__value})"def__str__(self):returnstr(self.__value)def__eq__(self,other):returnisinstance(other,Ok)andself.__value==other.__valuedef__instancecheck__(self,instance):returnisinstance(instance,Ok)defis_ok(self)->bool:returnTruedefis_ok_and(self,func:t.Callable[[KT],bool])->bool:returnfunc(self.__value)defis_err(self)->bool:returnFalsedefis_err_and(self,func:t.Callable[[KE],bool])->bool:returnFalsedefok(self)->"Option[KT]":returnOption.some(self.__value)deferr(self)->"Option[KE]":returnOption.none()defmap(self,func:t.Callable[[KT],U])->Result[U,KE]:returnResult.of_ok(func(self.__value))defmap_mut(self,func:t.Callable[[KT],None])->Result[KT,KE]:func(self.__value)returnselfdefmap_err_mut(self,func:t.Callable[[KE],None])->Result[KT,KE]:returnselfdefmap_or(self,default:U,func:t.Callable[[KT],U])->U:returnfunc(self.__value)defmap_or_else(self,default:t.Callable[[KE],U],func:t.Callable[[KT],U])->U:returnfunc(self.__value)defmap_err(self,func:t.Callable[[KE],F])->Result[KT,F]:returnResult.of_ok(self.__value)definspect(self,func:t.Callable[[KT],None])->Result[KT,KE]:func(self.__value)returnselfdefinspect_err(self,func:t.Callable[[KE],None])->Result[KT,KE]:returnselfdefto_array(self)->t.List[KT]:return[self.__value]defexpect(self,msg:str)->KT:returnself.__valuedefexpect_err(self,msg:str)->KE:raiseUnwrapException("Result",msg+f': {repr(self.__value)}')defto_pattern(self)->t.Tuple[bool,t.Union[KT,KE]]:returnTrue,self.__valuedefto_either(self)->"Left[KT, KE]":returnLeft(self.__value)defunwrap_unchecked(self)->t.Union[KT,KE]:returnself.__valuedefunwrap(self)->KT:returnself.__valuedefunwrap_or(self,default:KT)->KT:returnself.__valuedefunwrap_or_else(self,op:t.Callable[[KE],KT])->KT:returnself.__valuedefunwrap_err(self)->KE:raiseUnwrapException("Result",f"call `Result.unwrap_err` on an `Ok` value: {self.__value}")defbool_and(self,res:Result[U,KE])->Result[U,KE]:ifres.is_ok():returnResult.of_ok(res.unwrap())else:returnResult.of_err(res.unwrap_err())defand_then(self,op:t.Callable[[KT],Result[U,KE]])->Result[U,KE]:returnop(self.__value)defbool_or(self,res:Result[KT,F])->Result[KT,F]:returnResult.of_ok(self.__value)defor_else(self,op:t.Callable[[KE],Result[KT,F]])->Result[KT,F]:returnResult.of_ok(self.__value)
classErr(t.Generic[KT,KE],Result[KT,KE]):__value:KEdef__init__(self,value:KE):self.__value=valuedef__repr__(self):returnf"Result::Err({self.__value})"def__str__(self):returnstr(self.__value)def__eq__(self,other):returnisinstance(other,Err)andself.__value==other.__valuedef__instancecheck__(self,instance):returnisinstance(instance,Err)defis_ok(self)->bool:returnFalsedefis_ok_and(self,func:t.Callable[[KT],bool])->bool:returnFalsedefis_err(self)->bool:returnTruedefis_err_and(self,func:t.Callable[[KE],bool])->bool:returnfunc(self.__value)defok(self)->"Option[KT]":returnOption.none()deferr(self)->"Option[KE]":returnOption.some(self.__value)defmap(self,func:t.Callable[[KT],U])->Result[U,KE]:returnResult.of_err(self.__value)defmap_mut(self,func:t.Callable[[KT],None])->Result[KT,KE]:returnselfdefmap_err_mut(self,func:t.Callable[[KE],None])->Result[KT,KE]:func(self.__value)returnselfdefmap_or(self,default:U,func:t.Callable[[KT],U])->U:returndefaultdefmap_or_else(self,default:t.Callable[[KE],U],func:t.Callable[[KT],U])->U:returndefault(self.__value)defmap_err(self,func:t.Callable[[KE],F])->Result[KT,F]:returnResult.of_err(func(self.__value))definspect(self,func:t.Callable[[KT],None])->Result[KT,KE]:returnselfdefinspect_err(self,func:t.Callable[[KE],None])->Result[KT,KE]:func(self.__value)returnselfdefto_array(self)->t.List[KT]:return[]defexpect(self,msg:str)->KT:raiseUnwrapException("Result",msg+f': {repr(self.__value)}')defexpect_err(self,msg:str)->KE:returnself.__valuedefto_pattern(self)->t.Tuple[bool,t.Union[KT,KE]]:returnFalse,self.__valuedefto_either(self)->"Right[KT, KE]":returnRight(self.__value)defunwrap_unchecked(self)->t.Union[KT,KE]:returnself.__valuedefunwrap(self)->KT:raiseUnwrapException("Result",f"call `Result.unwrap` on an `Err` value: {repr(self.__value)}")defunwrap_or(self,default:KT)->KT:returndefaultdefunwrap_or_else(self,op:t.Callable[[KE],KT])->KT:returnop(self.__value)defunwrap_err(self)->KE:returnself.__valuedefbool_and(self,res:Result[U,KE])->Result[U,KE]:returnResult.of_err(self.__value)defand_then(self,op:t.Callable[[KT],Result[U,KE]])->Result[U,KE]:returnResult.of_err(self.__value)defbool_or(self,res:Result[KT,F])->Result[KT,F]:ifres.is_ok():returnResult.of_ok(res.unwrap())else:returnResult.of_err(res.unwrap_err())defor_else(self,op:t.Callable[[KE],Result[KT,F]])->Result[KT,F]:returnop(self.__value)