decodeError
Client-side: convert a CallData.Error into a Throwable using this method's forwardErrorMap. When CallData.Error.errorCode matches a @KsError binding and CallData.Error.errorData decodes successfully with the bound serializer, the deserialized typed Throwable itself is returned (and re-thrown by callChannel) — callers catch (e: MyError) typed.
For built-in sentinels the result is RpcEndpointException (KsrpcException.ENDPOINT_NOT_FOUND_CODE) or RpcException (KsrpcException.INTERNAL_ERROR_CODE).
Forward-compat: any other unknown wire code (e.g. a newer server's typed error not bound on this client) surfaces a generic KsrpcException carrying the raw wire-format payload bytes as KsrpcException.data, so callers can still inspect the payload manually rather than losing the information.