import type { ErrorType } from '../errors/utils.js' type FormatFn = ( parameters: parameters, ) => returnType type OverrideFormatFn = ( parameters: parameters, baseFn: baseFn, ) => returnType export type Formatter = { fromRpc: FormatFn toRpc: FormatFn } export type DefineFormatterParameters< fromRpc extends FormatFn = FormatFn, toRpc extends FormatFn = FormatFn, > = { fromRpc: fromRpc toRpc: toRpc } export type DefineFormatterErrorType = ErrorType export function defineFormatter< fromRpc extends FormatFn, toRpc extends FormatFn, >(parameters: DefineFormatterParameters) { const { fromRpc: fromRpc_base, toRpc: toRpc_base } = parameters return , rpcType = ReturnType>(overrides: { fromRpc: OverrideFormatFn toRpc: OverrideFormatFn }): Formatter => { const { fromRpc, toRpc } = overrides return { fromRpc(parameters) { return fromRpc(parameters, fromRpc_base) }, toRpc(parameters) { return toRpc(parameters, toRpc_base) }, } } }