package Ġcom . by but ter . sis y ph us . rpc Ċ Ċ import Ġcom . by but ter . sis y ph us . protobuf . Message Ċ import Ġcom . by but ter . sis y ph us . protobuf . primitives . Duration Ċ import Ġio . grpc . Metadata Ċ import Ġio . grpc . Status Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ open Ġclass ĠStatus Exception Ġ: ĠRuntimeException Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ code Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġ_ details Ġ= Ġmutable ListOf < Message < *, Ġ* >>() ĊĊĠĠĠ Ġval Ġcode : ĠInt Ġget () Ġ= Ġ_ code ĊĊĠĠĠ Ġval Ġdetails : ĠList < Message < *, Ġ* >> Ġget () Ġ= Ġ_ details ĊĊĠĠĠ Ġval Ġtrail ers : ĠMetadata Ġ= ĠMetadata () ĊĊĠĠĠ Ġconstructor ( status : ĠStatus ) Ġ: Ġthis ( status . code , Ġstatus . description , Ġstatus . cause ) ĊĊĠĠĠ Ġconstructor ( code : ĠCode , Ġcause : ĠThrowable ) Ġ: Ġthis ( code , Ġcause . message , Ġcause ) ĊĊĠĠĠ Ġconstructor ( code : ĠCode , Ġmessage : ĠString ? Ġ= Ġnull , Ġcause : ĠThrowable ? Ġ= Ġnull ) Ġ: Ġsuper ( message Ġ?: Ġcode . name , Ġcause ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ code Ġ= Ġcode . number ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( code : ĠStatus . Code , Ġcause : ĠThrowable ) Ġ: Ġthis ( code , Ġcause . message , Ġcause ) ĊĊĠĠĠ Ġconstructor ( code : ĠStatus . Code , Ġmessage : ĠString ? Ġ= Ġnull , Ġcause : ĠThrowable ? Ġ= Ġnull ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġmessage Ġ?: Ġcode . name , ĊĠĠĠĠĠĠĠ Ġcause ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ code Ġ= Ġcode . value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Localized Message ( locale : ĠString , Ġmessage : ĠString ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Localized Message ( locale , Ġmessage )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Localized Message ( message : ĠString ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Localized Message ( message )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Hel ps ( var arg Ġlinks : ĠHelp . Link ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Help (* links )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Resource Info ( ĊĠĠĠĠĠĠĠ Ġresource Type : ĠString , ĊĠĠĠĠĠĠĠ Ġresource Name : ĠString , ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġowner : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Resource Info ( resourceType , Ġresource Name , Ġdescription , Ġowner )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Request Info ( requestId : ĠString , Ġserving Data : ĠString Ġ= Ġ"") : ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Request Info ( requestId , Ġserving Data )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith BadRequest ( var arg Ġviolations : ĠBadRequest . Field Violation ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( BadRequest (* vi olations )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Precondition Failure ( var arg Ġviolations : ĠPre condition Failure . Violation ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Precondition Failure (* vi olations )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Quota Failure ( var arg Ġviolations : ĠQu ota Failure . Violation ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Quota Failure (* vi olations )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Retry Info ( retry Delay : ĠDuration ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Retry Info ( retry Delay )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Retry Info ( number : ĠLong , Ġunit : ĠTimeUnit Ġ= ĠTimeUnit . SECONDS ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Details ( Retry Info ( number , Ġunit )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Details ( message : ĠMessage < *, Ġ* >): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ details Ġ+= Ġmessage ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Details ( var arg Ġmessages : ĠMessage < *, Ġ* >): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ details Ġ+= Ġmessages . toList () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Details ( messages : ĠIterable < Message < *, Ġ* >> ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ details Ġ+= Ġmessages ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġwith Tr ailer ( key : ĠMetadata . Key < T >, Ġvalue : ĠT ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġtrail ers . put ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Trail ers ( trail ers : ĠMetadata ): ĠStatus Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . trail ers . merge ( trail ers ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġas Status (): ĠStatus Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStatus . from Code Value ( code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Description ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Cause ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġas Status Detail (): Ġcom . by but ter . sis y ph us . rpc . Status Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStatus Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . code Ġ= Ġthis @ Status Exception . code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . message Ġ= Ġthis @ Status Exception . message Ġ?: Ġ" Unknown " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . details Ġ+= Ġthis @ Status Exception . details ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ