/**
 * @module MQTT Packet Encoding/Decoding
 * @description This module provides comprehensive encoding and decoding functionality for MQTT packets
 * used in both server and client implementations. It handles all MQTT packet types and their
 * transformations between binary and object representations.
 */
import type { ClientId, Dup, PacketId, Payload, QoS, ReturnCodes, TAuthenticationResult, Topic, TopicFilter, TPacketType } from "./types.ts";
import { PacketNameByType, PacketType } from "./PacketType.ts";
import { invalidTopic, invalidTopicFilter, invalidUTF8 } from "./validators.ts";
import { decodeLength, encodeLength } from "./length.ts";
import { type ConnectPacket } from "./connect.ts";
import { type ConnackPacket } from "./connack.ts";
import { AuthenticationResult, AuthenticationResultByNumber } from "./AuthenticationResult.ts";
import { type PublishPacket } from "./publish.ts";
import { type PubackPacket } from "./puback.ts";
import { type PubrecPacket } from "./pubrec.ts";
import { type PubrelPacket } from "./pubrel.ts";
import { type PubcompPacket } from "./pubcomp.ts";
import { type SubscribePacket } from "./subscribe.ts";
import { type SubackPacket } from "./suback.ts";
import { type UnsubscribePacket } from "./unsubscribe.ts";
import { type UnsubackPacket } from "./unsuback.ts";
import { type PingreqPacket } from "./pingreq.ts";
import { type PingresPacket } from "./pingres.ts";
import { type DisconnectPacket } from "./disconnect.ts";
/**
 * this can be any possible MQTT packet
 */
export type AnyPacket = ConnectPacket | ConnackPacket | PublishPacket | PubackPacket | PubrecPacket | PubrelPacket | PubcompPacket | SubscribePacket | SubackPacket | UnsubscribePacket | UnsubackPacket | PingreqPacket | PingresPacket | DisconnectPacket;
export type { ClientId, ConnackPacket, ConnectPacket, DisconnectPacket, Dup, PacketId, Payload, PingreqPacket, PingresPacket, PubackPacket, PubcompPacket, PublishPacket, PubrecPacket, PubrelPacket, QoS, ReturnCodes, SubackPacket, SubscribePacket, TAuthenticationResult, Topic, TopicFilter, TPacketType, UnsubackPacket, UnsubscribePacket, };
export type { Subscription } from "./subscribe.ts";
export { AuthenticationResult, AuthenticationResultByNumber, decodeLength, encodeLength, invalidTopic, invalidTopicFilter, invalidUTF8, PacketNameByType, PacketType, };
/**
 * Array mapping MQTT packet types to their corresponding encode/decode handlers
 * Index corresponds to packet type number.
 */
export declare const packetsByType: readonly [null, {
    encode(packet: ConnectPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array, flags: number): ConnectPacket;
}, {
    encode(packet: ConnackPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array, _flags: number): ConnackPacket | undefined;
}, {
    encode(packet: PublishPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array, flags: number): PublishPacket;
}, {
    encode(packet: PubackPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array): PubackPacket;
}, {
    encode(packet: PubrecPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array): PubrecPacket;
}, {
    encode(packet: PubrelPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array): PubrelPacket;
}, {
    encode(packet: PubcompPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array): PubcompPacket;
}, {
    encode(packet: SubscribePacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array, flags: number): SubscribePacket;
}, {
    encode(packet: SubackPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array): SubackPacket;
}, {
    encode(packet: UnsubscribePacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array, flags: number): UnsubscribePacket;
}, {
    encode(packet: UnsubackPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array): UnsubackPacket;
}, {
    encode(_packet: PingreqPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array, flags: number): PingreqPacket;
}, {
    encode(_packet: PingresPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array): PingresPacket;
}, {
    encode(_packet: DisconnectPacket): {
        flags: number;
        bytes: number[];
    };
    decode(buffer: Uint8Array, _flags: number): DisconnectPacket;
}];
/**
 * @function encode
 * @description Encodes an MQTT packet object into a binary Uint8Array format
 * @param {AnyPacket} packet - The MQTT packet object to encode
 * @returns {Uint8Array} The encoded packet as a binary buffer
 * @throws {Error} If packet encoding fails
 */
export declare function encode(packet: AnyPacket): Uint8Array;
/**
 * @function decodePayload
 * @description Decodes a packet payload from binary format into an MQTT packet object
 * @param {number} firstByte - The first byte of the MQTT packet containing type and flags
 * @param {Uint8Array} buffer - The binary buffer containing the packet payload
 * @returns {AnyPacket} The decoded MQTT packet object
 * @throws {Error} If packet decoding fails
 */
export declare function decodePayload(firstByte: number, buffer: Uint8Array): AnyPacket;
/**
 * @function decode
 * @description Decodes a complete MQTT packet from binary format into a packet object
 * @param {Uint8Array} buffer - The binary buffer containing the complete MQTT packet
 * @returns {AnyPacket} The decoded MQTT packet object
 * @throws {DecoderError} If packet decoding fails due to invalid format or insufficient data
 */
export declare function decode(buffer: Uint8Array): AnyPacket;
export { getLengthDecoder } from "../mqttPacket/length.ts";
export type { LengthDecoderResult } from "../mqttPacket/length.ts";
//# sourceMappingURL=mod.d.ts.map