import type { AMQPMessage } from "./amqp-message.js";
import type { AMQPProperties } from "./amqp-properties.js";
/** Map of content-type → parser. */
export type ParserMap = {
    [K: string]: AMQPParser<unknown, unknown>;
};
/** Readonly view of a {@link ParserMap}; returned by helpers. */
export type ParserRegistry<T extends ParserMap> = {
    readonly [K in keyof T & string]: T[K];
};
export type JsonSerializable = string | number | boolean | null | JsonSerializable[] | {
    [key: string]: JsonSerializable;
};
/** Shape of {@link builtinParsers}: `text/plain` and `application/json`. */
export type BuiltinParsers = {
    "text/plain": AMQPParser<string, string>;
    "application/json": AMQPParser<JsonSerializable, unknown>;
};
export type InferParserInput<P> = P extends AMQPParser<infer TInput, unknown> ? TInput : never;
export type InferParserOutput<P> = P extends AMQPParser<never, infer Out> ? Out : never;
/** Map of content-encoding → coder. */
export type CoderMap = {
    [K: string]: AMQPCoder;
};
/** Readonly view of a {@link CoderMap}. */
export type CoderRegistry<T extends CoderMap> = {
    readonly [K in keyof T & string]: T[K];
};
/** Shape of {@link builtinCoders}: `gzip` and `deflate`. */
export type BuiltinCoders = {
    gzip: AMQPCoder;
    deflate: AMQPCoder;
};
/** Handles serialization/deserialization based on content-type. */
export interface AMQPParser<In = unknown, Out = unknown> {
    serialize(body: In, properties: AMQPProperties): Uint8Array;
    parse(body: Uint8Array, properties: AMQPProperties): Out;
}
/** Handles compression/decompression based on content-encoding. */
export interface AMQPCoder {
    encode(body: Uint8Array, properties: AMQPProperties): Promise<Uint8Array>;
    decode(body: Uint8Array, properties: AMQPProperties): Promise<Uint8Array>;
}
/**
 * Raw DEFLATE coder (RFC 1951 — no zlib header, no Adler-32 checksum).
 * Not registered by default. Use to interoperate with producers that emit
 * raw DEFLATE under `content-encoding: deflate`, the same ambiguity HTTP
 * has carried for decades and that Node's `zlib.deflateRawSync` exists for.
 *
 * @example
 * ```ts
 * import { AMQPSession, builtinCoders, deflateRawCoder } from "@cloudamqp/amqp-client"
 *
 * const session = await AMQPSession.connect(url, {
 *   coders: { ...builtinCoders, deflate: deflateRawCoder },
 * })
 * ```
 */
export declare const deflateRawCoder: AMQPCoder;
/**
 * Built-in parsers for `text/plain` and `application/json`.
 * Use directly, or merge with custom parsers via spread:
 * `{ ...builtinParsers, "text/csv": csvParser }`.
 */
export declare const builtinParsers: ParserRegistry<BuiltinParsers>;
/**
 * Built-in coders for `gzip` and `deflate`.
 * Uses `CompressionStream`/`DecompressionStream` — requires Node 18+ or a modern browser.
 */
export declare const builtinCoders: CoderRegistry<BuiltinCoders>;
export declare function serializeAndEncode(parsers: ParserMap, coders: CoderMap, body: unknown, properties: AMQPProperties, defaults?: {
    contentType?: string;
    contentEncoding?: string;
}): Promise<{
    body: Uint8Array;
    properties: AMQPProperties;
}> | {
    body: Uint8Array;
    properties: AMQPProperties;
};
export declare function decodeAndParse(parsers: ParserMap, coders: CoderMap, body: Uint8Array, properties: AMQPProperties): Promise<unknown> | unknown;
export declare function decodeMessage(msg: AMQPMessage, parsers: ParserMap, coders: CoderMap): Promise<void>;
//# sourceMappingURL=amqp-codec-registry.d.ts.map