import { Uint } from "low-level";
import type { AnyObj } from "./types.js";
import { DataEncoder } from "./encoders.js";
export declare class ObjectEncoding {
    static encode(object: AnyObj, keyConfigs: readonly DataEncoder[], forHash: boolean): ObjectEncoding.EncodeResult;
    static decode(hexData: Uint, keyConfigs: readonly DataEncoder[], returnLength?: false): ObjectEncoding.DecodeResult<ObjectEncoding.DecodeResult.Default>;
    static decode(hexData: Uint, keyConfigs: readonly DataEncoder[], returnLength: true): ObjectEncoding.DecodeResult<ObjectEncoding.DecodeResult.WithLength>;
    static decode(hexData: Uint, keyConfigs: readonly DataEncoder[], returnLength: boolean): ObjectEncoding.DecodeResult<ObjectEncoding.DecodeResult.Unknown>;
}
export declare namespace ObjectEncoding {
    interface EncodeResult {
        data: Uint;
        err?: Error;
    }
    namespace DecodeResult {
        interface Err {
            err: Error;
            data: undefined;
            length: undefined;
        }
        interface Default {
            data: AnyObj;
            err: undefined;
        }
        interface WithLength extends Default {
            length: number;
        }
        interface Unknown extends Default {
            length?: number;
        }
    }
    type DecodeResult<T> = T | DecodeResult.Err;
}
