import { ExtendableError } from '../extendable-error';
import { ExceptionReason } from './ExceptionReason';
export declare const logOnException: (target: any, propertyKey: string, descriptor: PropertyDescriptor) => any;
export type StringProducer = () => string;
export declare class BringgException<T = any> extends ExtendableError {
    readonly reason: ExceptionReason;
    readonly error?: Error;
    private readonly messageProducer;
    private _details;
    rc: number;
    statusCode: number;
    readonly data: T;
    errors?: any;
    constructor(reason: ExceptionReason, messageProducer?: string | StringProducer, error?: Error, data?: T);
    get message(): string;
    /**
     * pass message producer instead, this is a NoOp
     */
    set message(value: string);
    get details(): string | StringProducer;
    set details(details: string | StringProducer);
    static serviceException(message: string | StringProducer): () => BringgException;
}
