import { ExecutionResult } from './executionResult';
import { IContainer } from '../../di/resolvers';
import { RequestContext } from '../../servers/requestContext';
import { IMetrics } from '../../metrics/metrics';
/**
 * command
 *
 * @export
 * @interface ICommand
 */
export interface ICommand {
    /**
     * execute the command
     * @param args
     */
    executeAsync<T>(...args: any[]): Promise<T>;
    /**
     * execution result
     */
    status: ExecutionResult;
}
/**
 *
 *
 * @export
 * @abstract
 * @class AbstractCommand
 * @template T
 */
export declare abstract class AbstractCommand<T> {
    protected metrics: IMetrics;
    protected customTags: string;
    /**
     *
     *
     * @type {RequestContext}
     */
    requestContext: RequestContext;
    /**
     * Components container
     *
     * @readonly
     *
     * @memberOf AbstractCommand
     */
    readonly container: IContainer;
    /**
     * Creates an instance of AbstractCommand.
     *
     * @param {IContainer} container
     * @param {any} providerFactory
     */
    constructor(container: IContainer);
    protected setMetricsTags(...args: Array<string>): void;
    /**
     * execute command
     * @protected
     * @abstract
     * @param {any} args
     * @returns {Promise<T>}
     */
    abstract runAsync(...args: any[]): Promise<T>;
}
