import { TRequestPayloadType } from '../types';
export type TRequestMessageDirection = 'incoming' | 'outgoing';
export type TRequestMessageType = Extract<TRequestPayloadType, 'json' | 'plain'>;
export declare class RequestMessage<TPayload = any> {
    protected provided: Pick<RequestMessage<TPayload>, 'direction' | 'type' | 'data' | 'raw'> & {
        timestamp?: number;
    };
    TPlain: Pick<RequestMessage<TPayload>, 'type' | 'direction' | 'timestamp' | 'data'>;
    TCache: Pick<RequestMessage<TPayload>, 'type' | 'direction' | 'timestamp' | 'data'> & {
        raw: {
            data?: string;
        };
    };
    direction: TRequestMessageDirection;
    type: TRequestMessageType;
    timestamp: number;
    data: TPayload;
    raw: {
        data?: Buffer;
    };
    constructor(provided: Pick<RequestMessage<TPayload>, 'direction' | 'type' | 'data' | 'raw'> & {
        timestamp?: number;
    });
    is(type: 'json'): this is RequestMessage<Extract<TPayload, object>>;
    is(type: 'plain'): this is RequestMessage<Exclude<TPayload, object>>;
    serialize(): Buffer;
    /** Returns bytes length of data */
    size(): number;
    /** Clones this instance */
    clone(options?: {
        /** Deep clones nested `json` data */
        deep?: boolean;
    }): RequestMessage<TPayload>;
    redirect(direction: TRequestMessageDirection): this;
    toPlain(): RequestMessage<TPayload>['TPlain'];
    toCache(): RequestMessage<TPayload>['TCache'];
    static build<TPayload>(plain: RequestMessage<TPayload>['TPlain']): RequestMessage<TPayload>;
    static build<TPayload>(direction: TRequestMessageDirection, predicate: unknown): RequestMessage<TPayload>;
}
//# sourceMappingURL=message.d.ts.map