import type { Writer, Reader } from './index.js'; export declare enum CODEC_TYPES { VARINT = 0, BIT64 = 1, LENGTH_DELIMITED = 2, START_GROUP = 3, END_GROUP = 4, BIT32 = 5 } export interface EncodeOptions { lengthDelimited?: boolean; writeDefaults?: boolean; } export interface EncodeFunction { (value: Partial, writer: Writer, opts?: EncodeOptions): void; } type CollectionTypes = any[] | Map; type PrimitiveTypes = boolean | number | string | bigint | Uint8Array; type CollectionLimits = { [K in keyof T]: T[K] extends CollectionTypes ? number : T[K] extends PrimitiveTypes ? never : Limits; }; type ArrayElementLimits = { [K in keyof T as `${string & K}$`]: T[K] extends Array ? (ElementType extends PrimitiveTypes ? never : Limits) : (T[K] extends PrimitiveTypes ? never : Limits); }; type MapValueLimits = { [K in keyof T as `${string & K}$value`]: T[K] extends Map ? (MapValueType extends PrimitiveTypes ? never : Limits) : (T[K] extends PrimitiveTypes ? never : Limits); }; type Limits = Partial & ArrayElementLimits & MapValueLimits>; export interface DecodeOptions { /** * Runtime-specified limits for lengths of repeated/map fields */ limits?: Limits; } export interface DecodeFunction { (reader: Reader, length?: number, opts?: DecodeOptions): T; } export interface Codec { name: string; type: CODEC_TYPES; encode: EncodeFunction; decode: DecodeFunction; } export declare function createCodec(name: string, type: CODEC_TYPES, encode: EncodeFunction, decode: DecodeFunction): Codec; export {}; //# sourceMappingURL=codec.d.ts.map