import { Request, Response, NextFunction } from '../types';
/**
 * Extend this class to create ServerErrorMiddleware
 */
export declare abstract class ErrorMiddleware {
    abstract invoke(err: Error, request: Request, response: Response, next: NextFunction): void;
}
/**
 * Extend this class to create ServerErrorMiddlewareAsync
 */
export declare abstract class ErrorMiddlewareAsync {
    abstract invoke(err: Error, request: Request, response: Response, next: NextFunction): Promise<void>;
}
/**
 * Extend this class to create ApplicationStartMiddleware
 */
export declare abstract class AppStartMiddleware {
    abstract invoke(): void;
}
/**
 * Extend this class to create RequestStartMiddleware
 */
export declare abstract class RequestStartMiddleware {
    abstract invoke(request: Request, response: Response, next: NextFunction): void;
}
/**
 * Extend this class to create RequestStartMiddlewareAsync
 */
export declare abstract class RequestStartMiddlewareAsync {
    abstract invoke(request: Request, response: Response, next: NextFunction): Promise<void>;
}
/**
 * Extend this class to create RequestEndMiddleware
 */
export declare abstract class RequestEndMiddleware {
    abstract invoke(request: Request, response: Response, next: NextFunction, result: any): void;
}
/**
 * Extend this class to create RequestEndMiddlewareAsync
 */
export declare abstract class RequestEndMiddlewareAsync {
    abstract invoke(request: Request, response: Response, next: NextFunction, result: any): Promise<void>;
}
/**
 * Extend this class to create Middleware
 */
export declare abstract class Middleware {
    abstract invoke(request: Request, response: Response, next: NextFunction, data?: any): void;
}
/**
 * Extend this class to create MiddlewareAsync
 */
export declare abstract class MiddlewareAsync {
    abstract invoke(request: Request, response: Response, next: NextFunction, data?: any): Promise<void>;
}
/**
 * Extend this class to create ActionFilter
 */
export declare abstract class ActionFilter {
    abstract beforeExecution(request: Request, response: Response, next: NextFunction, data?: any): void;
    abstract afterExecution(request: Request, response: Response, next: NextFunction, result: any, data?: any): void;
}
/**
 * Extend this class to create ActionFilterAsync
 */
export declare abstract class ActionFilterAsync {
    abstract beforeExecution(request: Request, response: Response, next: NextFunction, data?: any): Promise<void>;
    abstract afterExecution(request: Request, response: Response, next: NextFunction, result: any, data?: any): Promise<void>;
}
/**
 * Extend this class to create ExceptionFilter
 */
export declare abstract class ExceptionFilter {
    abstract invoke(err: Error, request: Request, response: Response, next: NextFunction): void;
}
/**
 * Extend this class to create ExceptionFilterAsync
 */
export declare abstract class ExceptionFilterAsync {
    abstract invoke(err: Error, request: Request, response: Response, next: NextFunction): Promise<void>;
}
/**
 * Extend this class to create ResultFilter
 */
export declare abstract class ResultFilter {
    abstract invoke(request: Request, response: Response, next: NextFunction, result: any, data?: any): void;
}
/**
 * Extend this class to create ResultFilterAsync
 */
export declare abstract class ResultFilterAsync {
    abstract invoke(request: Request, response: Response, next: NextFunction, result: any, data?: any): Promise<void>;
}
