import type { BinaryReadOptions, BinaryWriteOptions, JsonReadOptions, JsonWriteOptions, Message, MessageType, MethodInfo } from "@bufbuild/protobuf";
/**
 * Serialization provides methods to serialize or parse data with a certain
 * format.
 *
 * @private Internal code, does not follow semantic versioning.
 */
export interface Serialization<T> {
    /**
     * Serialize T. Raises a ConnectError with Code.Internal if an error occurs.
     */
    serialize: (data: T) => Uint8Array;
    /**
     * Parse T. Raises a ConnectError with Code.InvalidArgument if an error occurs.
     */
    parse: (data: Uint8Array) => T;
}
/**
 * Sets default JSON serialization options for connect-es.
 *
 * With standard protobuf JSON serialization, unknown JSON fields are
 * rejected by default. In connect-es, unknown JSON fields are ignored
 * by default.
 */
export declare function getJsonOptions(options: Partial<JsonReadOptions & JsonWriteOptions> | undefined): {
    ignoreUnknownFields?: boolean | undefined;
    typeRegistry?: import("@bufbuild/protobuf").IMessageTypeRegistry & Partial<import("@bufbuild/protobuf").IExtensionRegistry>;
    emitDefaultValues?: boolean | undefined;
    enumAsInteger?: boolean | undefined;
    useProtoFieldName?: boolean | undefined;
};
/**
 * Create an object that provides convenient access to request and response
 * message serialization for a given method.
 *
 * @private Internal code, does not follow semantic versioning.
 */
export declare function createMethodSerializationLookup<I extends Message<I>, O extends Message<O>>(method: MethodInfo<I, O>, binaryOptions: Partial<BinaryReadOptions & BinaryWriteOptions> | undefined, jsonOptions: Partial<JsonReadOptions & JsonWriteOptions> | undefined, limitOptions: {
    writeMaxBytes: number;
    readMaxBytes: number;
}): MethodSerializationLookup<I, O>;
/**
 * MethodSerializationLookup provides convenient access to request and response
 * message serialization for a given method.
 *
 * @private Internal code, does not follow semantic versioning.
 */
export interface MethodSerializationLookup<I extends Message<I>, O extends Message<O>> {
    /**
     * Get the JSON or binary serialization for the request message type.
     */
    getI(useBinaryFormat: boolean): Serialization<I>;
    /**
     * Get the JSON or binary serialization for the response message type.
     */
    getO(useBinaryFormat: boolean): Serialization<O>;
}
/**
 * Returns functions to normalize and serialize the input message
 * of an RPC, and to parse the output message of an RPC.
 *
 * @private Internal code, does not follow semantic versioning.
 */
export declare function createClientMethodSerializers<I extends Message<I>, O extends Message<O>>(method: MethodInfo<I, O>, useBinaryFormat: boolean, jsonOptions?: JsonSerializationOptions, binaryOptions?: BinarySerializationOptions): {
    parse: (data: Uint8Array) => O;
    serialize: (data: I) => Uint8Array;
};
/**
 * Apply I/O limits to a Serialization object, returning a new object.
 *
 * @private Internal code, does not follow semantic versioning.
 */
export declare function limitSerialization<T>(serialization: Serialization<T>, limitOptions: {
    writeMaxBytes: number;
    readMaxBytes: number;
}): Serialization<T>;
/**
 * Options for createBinarySerialization()
 */
type BinarySerializationOptions = Partial<BinaryReadOptions & BinaryWriteOptions>;
/**
 * Creates a Serialization object for serializing the given protobuf message
 * with the protobuf binary format.
 */
export declare function createBinarySerialization<T extends Message<T>>(messageType: MessageType<T>, options: BinarySerializationOptions | undefined): Serialization<T>;
/**
 * Options for createJsonSerialization()
 */
type JsonSerializationOptions = Partial<JsonReadOptions & JsonWriteOptions> & {
    textEncoder?: {
        encode(input?: string): Uint8Array;
    };
    textDecoder?: {
        decode(input?: Uint8Array): string;
    };
};
/**
 * Creates a Serialization object for serializing the given protobuf message
 * with the protobuf canonical JSON encoding.
 *
 * By default, unknown fields are ignored.
 */
export declare function createJsonSerialization<T extends Message<T>>(messageType: MessageType<T>, options: JsonSerializationOptions | undefined): Serialization<T>;
export {};
