import { EExchangeType, IExchangeParams, IRequiredConfig, TQueueParams } from '../../../types';
import { RedisClient } from 'redis-smq-common';
import { ICallback } from 'redis-smq-common/dist/types';
export declare abstract class Exchange<TBindingParams, TBindingType extends EExchangeType> {
    protected exchangeTag: string;
    protected destinationQueue: TQueueParams | null;
    protected bindingParams: TBindingParams;
    protected type: TBindingType;
    protected constructor(bindingParams: TBindingParams, type: TBindingType);
    protected generateExchangeTag(): string;
    setDestinationQueue(queue: TQueueParams | null): void;
    getBindingParams(): TBindingParams;
    getDestinationQueue(): TQueueParams | null;
    getRequiredDestinationQueue(): TQueueParams;
    toJSON(): IExchangeParams<TBindingParams, TBindingType>;
    fromJSON(JSON: Partial<IExchangeParams<TBindingParams, TBindingType>>): void;
    protected abstract validateBindingParams(bindingParams: TBindingParams): TBindingParams;
    abstract getQueues(redisClient: RedisClient, config: IRequiredConfig, cb: ICallback<TQueueParams[]>): void;
}
