import { Deserializer, DeserializerConfig, FieldTransform, RuleContext, SerdeType, Serializer, SerializerConfig } from "./serde";
import { Client, SchemaInfo, SchemaMetadata } from "../schemaregistry-client";
import { DescFile, DescMessage, FileRegistry, MutableRegistry } from "@bufbuild/protobuf";
import { LRUCache } from "lru-cache";
import { RuleRegistry } from "./rule-registry";
export interface ProtobufSerde {
    schemaToDescCache: LRUCache<string, DescFile>;
}
/**
 * ProtobufSerializerConfig is the configuration for ProtobufSerializer.
 */
export type ProtobufSerializerConfig = SerializerConfig & {
    registry?: MutableRegistry;
};
/**
 * ProtobufSerializer is a serializer for Protobuf messages.
 */
export declare class ProtobufSerializer extends Serializer implements ProtobufSerde {
    registry: MutableRegistry;
    fileRegistry: FileRegistry;
    schemaToDescCache: LRUCache<string, DescFile>;
    descToSchemaCache: LRUCache<string, SchemaInfo>;
    /**
     * Creates a new ProtobufSerializer.
     * @param client - the schema registry client
     * @param serdeType - the serializer type
     * @param conf - the serializer configuration
     * @param ruleRegistry - the rule registry
     */
    constructor(client: Client, serdeType: SerdeType, conf: ProtobufSerializerConfig, ruleRegistry?: RuleRegistry);
    /**
     * Serializes a message.
     * @param topic - the topic
     * @param msg - the message
     */
    serialize(topic: string, msg: any): Promise<Buffer>;
    getSchemaInfo(fileDesc: DescFile): Promise<SchemaInfo>;
    toProtobufSchema(fileDesc: DescFile): Map<string, string>;
    toDependencies(fileDesc: DescFile, deps: Map<string, string>): void;
    resolveDependencies(fileDesc: DescFile, deps: Map<string, string>, subject: string, autoRegister: boolean, normalize: boolean): Promise<SchemaMetadata>;
    toMessageIndexBytes(messageDesc: DescMessage): Buffer;
    toMessageIndexes(messageDesc: DescMessage, count: number): number[];
    toIndex(messageDesc: DescMessage): number;
    fieldTransform(ctx: RuleContext, fieldTransform: FieldTransform, msg: any): Promise<any>;
    toFileDesc(client: Client, info: SchemaInfo): Promise<DescFile>;
    parseFileDesc(client: Client, info: SchemaInfo): Promise<DescFile | undefined>;
    toMessageDescFromName(fd: DescFile, msgName: string): DescMessage;
}
/**
 * ProtobufDeserializerConfig is the configuration for ProtobufDeserializer.
 */
export type ProtobufDeserializerConfig = DeserializerConfig;
/**
 * ProtobufDeserializer is a deserializer for Protobuf messages.
 */
export declare class ProtobufDeserializer extends Deserializer implements ProtobufSerde {
    fileRegistry: FileRegistry;
    schemaToDescCache: LRUCache<string, DescFile>;
    /**
     * Creates a new ProtobufDeserializer.
     * @param client - the schema registry client
     * @param serdeType - the deserializer type
     * @param conf - the deserializer configuration
     * @param ruleRegistry - the rule registry
     */
    constructor(client: Client, serdeType: SerdeType, conf: ProtobufDeserializerConfig, ruleRegistry?: RuleRegistry);
    /**
     * Deserializes a message.
     * @param topic - the topic
     * @param payload - the message payload
     */
    deserialize(topic: string, payload: Buffer): Promise<any>;
    fieldTransform(ctx: RuleContext, fieldTransform: FieldTransform, msg: any): Promise<any>;
    toFileDesc(client: Client, info: SchemaInfo): Promise<DescFile>;
    parseFileDesc(client: Client, info: SchemaInfo): Promise<DescFile | undefined>;
    toMessageDescFromName(fd: DescFile, msgName: string): DescMessage;
    readMessageIndexes(payload: Buffer): [number, number[]];
    toMessageDescFromIndexes(fd: DescFile, msgIndexes: number[]): DescMessage;
    toNestedMessageDesc(parent: DescMessage, msgIndexes: number[]): DescMessage;
}
