Decodes messages from the pod process
@callback decode(message :: term(), encoding :: String.t()) :: {:ok | :error, term()}
@callback decode!(message :: term(), encoding :: String.t()) :: term()