/// <reference path="../../adonis-typings/profiler.d.ts" />
import { ProfilerActionContract, AbstractProfilerContract } from '@ioc:Adonis/Core/Profiler';
/**
 * Abstract class to be extended to add support for timing functions.
 */
export declare abstract class AbstractProfiler implements AbstractProfilerContract {
    protected abstract getAction(action: string, data: any): ProfilerActionContract;
    /**
     * Profile asyncronously. If you are are not passing a callback to this method,
     * then consider using [[this.profile]].
     */
    profileAsync<T extends any>(action: string, data: any, cb: () => Promise<T>): Promise<T>;
    profileAsync(action: string, data?: any): Promise<ProfilerActionContract>;
    /**
     * Get a new profiler action instance to time your code. Make sure
     * to call the `end` function, when manually managing the actions
     */
    profile<T extends any>(action: string, data: any, cb: () => T): T;
    profile(action: string, data?: any): ProfilerActionContract;
}
