package Ġio . pro venance . event stream . stream . rpc . response Ċ Ċ import Ġio . pro venance . event stream . stream . decoder . Decoder Ġas ĠT Decoder Ċ import Ġio . pro venance . event stream . adapter . json . decoder . Decoder DataException Ċ import Ġio . pro venance . event stream . adapter . json . decoder . Decoder Engine Ċ import Ġio . pro venance . event stream . stream . New Block Result Ċ import Ġio . pro venance . event stream . stream . models . New Block Header Result Ċ import Ġmu . Kotlin Logging Ċ import Ġkotlin . reflect . full . primary Constructor Ċ Ċ /** Ċ Ġ* ĠA Ġsealed Ġclass Ġfamily Ġwhich Ġdefines Ġthe Ġresults Ġof Ġdecoding Ġa ĠT ender mint Ġwebsocket / RPC ĠAPI Ġresponse . Ċ Ġ*/ Ċ sealed Ġinterface ĠMessageType Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDecode Ġthe Ġsupplied Ġinput Ġinto Ġone Ġof Ġthe Ġvariants Ġof Ġ[ MessageType ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠDecoder ( private Ġval Ġengine : ĠDecoder Engine ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDe coders Ġare Ġattempted Ġaccording Ġto Ġtheir Ġassigned Ġpriority Ġin Ġdescending Ġorder : ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġde coders Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT Decoder :: class . sealed Sub classes . map NotNull Ġ{ Ġclazz Ġ-> Ġclazz . primary Constructor ?. call ( engine ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Descending Ġ{ Ġit . priority Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecode ( input : ĠString ): ĠMessageType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( decoder Ġin Ġde coders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġdecoder . decode ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDecoder DataException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . trace (" failed Ġto Ġdecode Ġas Ġ${ decoder . java Class . simple Name }: Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUnknown ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġunknown Ġmessage Ġwas Ġreceived . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠUnknown ( val Ġtype : ĠString ) Ġ: ĠMessageType ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġempty Ġmessage Ġwas Ġreceived . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġexample Ġof Ġan Ġempty Ġmessage : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġ" jsonrpc ": Ġ" 2 . 0 ", ĊĠĠĠĠ Ġ* ĠĠ Ġ" id ": Ġ" 0 ", ĊĠĠĠĠ Ġ* ĠĠ Ġ" result ": Ġ{} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġobject ĠEmpty Ġ: ĠMessageType ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġerror Ġwas Ġreceived Ġfrom Ġthe ĠRPC ĠAPI . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠError ( val Ġerror : ĠRpc Error ) Ġ: ĠMessageType ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġpanic Ġmessage Ġwas Ġreceived Ġfrom Ġthe ĠRPC ĠAPI . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠPan ic ( val Ġerror : ĠRpc Error ) Ġ: ĠMessageType ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmessage Ġindicating Ġa Ġnew Ġblock Ġwas Ġcreated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠNew Block ( val Ġblock : ĠNew Block Result ) Ġ: ĠMessageType ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠNew Block Header ( val Ġheader : ĠNew Block Header Result ) Ġ: ĠMessageType Ċ } Ċ