export interface HamokEncoder<U, R> {
    encode(data: U): R;
}
export interface HamokDecoder<U, R> {
    decode(data: R): U;
}
export declare function createHamokCodec<U, R>(encode: (input: U) => R, decode: (input: R) => U): HamokCodec<U, R>;
export declare function createHamokJsonBinaryCodec<T>(): HamokCodec<T, Uint8Array>;
export declare function createHamokJsonStringCodec<T>(): HamokCodec<T, string>;
export interface HamokCodec<U, R> extends HamokEncoder<U, R>, HamokDecoder<U, R> {
}
export declare class FacadedHamokCodec<TIn = any, TOut = any> implements HamokCodec<TIn, TOut> {
    static wrap<U = any, R = any>(codec: HamokCodec<U, R>): FacadedHamokCodec<U, R>;
    private _codec;
    private constructor();
    encode(data: TIn): TOut;
    decode(data: TOut): TIn;
    then<TNextOut = TOut>(nextCodec: HamokCodec<TOut, TNextOut>): FacadedHamokCodec<TIn, TNextOut>;
}
export declare function encodeCollection<K>(keys: IterableIterator<K>, keyCodec: HamokCodec<K, Uint8Array>): Uint8Array[];
export declare function decodeCollection<K>(keys: IterableIterator<Uint8Array>, keyCodec: HamokCodec<K, Uint8Array>): K[];
export declare function encodeSet<K>(keys: ReadonlySet<K>, keyCodec: HamokCodec<K, Uint8Array>): Uint8Array[];
export declare function decodeSet<K>(keys: Uint8Array[], keyCodec: HamokCodec<K, Uint8Array>): ReadonlySet<K>;
export declare function encodeMap<K, V>(entries: ReadonlyMap<K, V>, keyCodec: HamokCodec<K, Uint8Array>, valueCodec: HamokCodec<V, Uint8Array>): [Uint8Array[], Uint8Array[]];
export declare function decodeMap<K, V>(keys: Uint8Array[], values: Uint8Array[], keyCodec: HamokCodec<K, Uint8Array>, valueCodec: HamokCodec<V, Uint8Array>): ReadonlyMap<K, V>;
export declare function encodeNumber(value: number): Uint8Array;
export declare function createStrToUint8ArrayCodec(encoding?: BufferEncoding): HamokCodec<string, Uint8Array>;
//# sourceMappingURL=HamokCodec.d.ts.map