import { AttributeId, ClusterId, EndpointNumber, NodeId, TlvAttributeReport, TlvAttributeReportData, TlvDataReport, TlvEncodingOptions, TlvEventData, TlvEventReport, TlvSchema, TlvStream, TypeFromSchema } from "@matter/types";
/** Type for TlvAttributeReportData where the real data are represented with the schema and the JS value. */
type AttributeDataPayload = Omit<TypeFromSchema<typeof TlvAttributeReportData>, "data"> & {
    tlv: TlvSchema<any>;
    payload: any;
};
/** Type for TlvAttributeReport where the real data are represented with the schema and the JS value. */
export type AttributeReportPayload = Omit<TypeFromSchema<typeof TlvAttributeReport>, "attributeData"> & {
    attributeData?: AttributeDataPayload;
    hasFabricSensitiveData: boolean;
};
/** Type for TlvEventData where the real data are represented with the schema and the JS value. */
export type EventDataPayload = Omit<TypeFromSchema<typeof TlvEventData>, "data"> & {
    tlv: TlvSchema<any>;
    payload: any;
};
/** Type for TlvEventReport where the real data are represented with the schema and the JS value. */
export type EventReportPayload = Omit<TypeFromSchema<typeof TlvEventReport>, "eventData"> & {
    eventData?: EventDataPayload;
    hasFabricSensitiveData: boolean;
};
export type EventOrAttributeDataPayload = AttributeReportPayload | EventReportPayload;
/** A base type for a DataReport which removes the fields of the actual attribute or event content */
export type BaseDataReport = Omit<TypeFromSchema<typeof TlvDataReport>, "attributeReports" | "eventReports">;
/** Type for TlvDataReport where the real data are represented with the schema and the JS value. */
export type DataReportPayload = BaseDataReport & {
    attributeReportsPayload?: AttributeReportPayload[];
    eventReportsPayload?: EventReportPayload[];
};
/**
 * Type for the DataReport Generator function to send all data
 */
export type DataReportPayloadIterator = AsyncIterableIterator<EventOrAttributeDataPayload>;
export declare function encodeAttributePayloadData(attributePayload: AttributeReportPayload, options?: TlvEncodingOptions): TlvStream;
/** Encodes an AttributeReportPayload into a TlvStream (used for TlvAny type). */
export declare function encodeAttributePayload(attributePayload: AttributeReportPayload, options?: TlvEncodingOptions): TlvStream;
/** Encodes an EventReportPayload into a TlvStream (used for TlvAny type). */
export declare function encodeEventPayload(eventPayload: EventReportPayload, options?: TlvEncodingOptions): TlvStream;
/** Return if an AttributeReportPayload can be chunked or not. */
export declare function canAttributePayloadBeChunked(attributePayload: AttributeReportPayload): boolean;
/** Chunk an AttributeReportPayload into multiple AttributeReportPayloads. */
export declare function chunkAttributePayload(attributePayload: AttributeReportPayload): AttributeReportPayload[];
/**
 * Sort function to sort AttributeReportPayloads by nodeId/EndpointId/clusterId/attributeId to generate an ideal
 * ground for tag compression.
 */
export declare function sortAttributeDataByPath(data1: AttributeReportPayload, data2: AttributeReportPayload): 0 | 1 | -1;
/** Sort and use Tag compression to compress a list of AttributeReportPayloads. */
export declare function compressAttributeDataReportTags(data: AttributeReportPayload[]): {
    hasFabricSensitiveData: boolean;
    attributeData: AttributeDataPayload | undefined;
    attributeStatus: import("@matter/types").TypeFromFields<{
        path: import("@matter/types").FieldType<import("@matter/types").TypeFromFields<{
            enableTagCompression: import("@matter/types").OptionalFieldType<boolean>;
            nodeId: import("@matter/types").OptionalFieldType<import("@matter/types").NodeId>;
            endpointId: import("@matter/types").OptionalFieldType<import("@matter/types").EndpointNumber>;
            clusterId: import("@matter/types").OptionalFieldType<import("@matter/types").ClusterId>;
            attributeId: import("@matter/types").OptionalFieldType<import("@matter/types").AttributeId>;
            listIndex: import("@matter/types").OptionalFieldType<number | null>;
            wildcardPathFlags: import("@matter/types").OptionalFieldType<import("@matter/types").TypeFromPartialBitSchema<{
                skipRootNode: import("@matter/types").BitFlag;
                skipGlobalAttributes: import("@matter/types").BitFlag;
                skipAttributeList: import("@matter/types").BitFlag;
                reserved1: import("@matter/types").BitFlag;
                skipCommandLists: import("@matter/types").BitFlag;
                skipCustomElements: import("@matter/types").BitFlag;
                skipFixedAttributes: import("@matter/types").BitFlag;
                skipChangesOmittedAttributes: import("@matter/types").BitFlag;
                skipDiagnosticsClusters: import("@matter/types").BitFlag;
            }>>;
        }>>;
        status: import("@matter/types").FieldType<import("@matter/types").TypeFromFields<{
            status: import("@matter/types").FieldType<import("@matter/types").Status>;
            clusterStatus: import("@matter/types").OptionalFieldType<import("@matter/types").Status>;
        }>>;
    }> | undefined;
}[];
export {};
//# sourceMappingURL=AttributeDataEncoder.d.ts.map