import { Duration } from "../utils/duration";
import { SessionTo } from "../session";
import JvmPaces = io.gatling.javaapi.core.pause.Paces;
export interface PaceFunction<T extends Paces<T>> {
    /**
     * Attach a pace action
     *
     * @param duration - the duration of the pace, in seconds or with an explicit time unit
     * @returns a new StructureBuilder
     */
    (duration: Duration): T;
    /**
     * Attach a pace action where the duration is defined as a Gatling Expression Language string. This expression must
     * resolve to either a number, then the unit will be seconds, or an object with an explicit time unit.
     *
     * @param duration - the duration of the pace
     * @returns a new StructureBuilder
     */
    (duration: string): T;
    /**
     * Attach a pace action
     *
     * @param duration - the duration of the pace as a function
     * @returns a new StructureBuilder
     */
    (duration: SessionTo<Duration>): T;
    /**
     * Attach a pace action
     *
     * @param duration - the duration of the pace, in seconds or with an explicit time unit
     * @param counterName - the name of the loop counter, as stored in the Session
     * @returns a new StructureBuilder
     */
    (duration: Duration, counterName: string): T;
    /**
     * Attach a pace action where the duration is defined as a Gatling Expression Language string. This expression must
     * resolve to either a number, then the unit will be seconds, or an object with an explicit time unit.
     *
     * @param duration - the duration of the pace
     * @param counterName - the name of the loop counter, as stored in the Session
     * @returns a new StructureBuilder
     */
    (duration: string, counterName: string): T;
    /**
     * Attach a pace action
     *
     * @param duration - the duration of the pace as a function
     * @param counterName - the name of the loop counter, as stored in the Session
     * @returns a new StructureBuilder
     */
    (duration: SessionTo<Duration>, counterName: string): T;
    /**
     * Attach a pace action where the duration is random between 2 bounds
     *
     * @param min - the duration of the pace, in seconds or with an explicit time unit
     * @param max - the duration of the pace, in seconds or with an explicit time unit
     * @returns a new StructureBuilder
     */
    (min: Duration, max: Duration): T;
    /**
     * Attach a pace action where the duration is random between 2 bounds
     *
     * @param min - the duration of the pace as a function
     * @param max - the duration of the pace as a function
     * @returns a new StructureBuilder
     */
    (min: SessionTo<Duration>, max: SessionTo<Duration>): T;
    /**
     * Attach a pace action where the duration is random between 2 bounds
     *
     * @param min - the duration of the pace, in seconds or with an explicit time unit
     * @param max - the duration of the pace, in seconds or with an explicit time unit
     * @param counterName - the name of the loop counter, as stored in the Session
     * @returns a new StructureBuilder
     */
    (min: Duration, max: Duration, counterName: string): T;
    /**
     * Attach a pace action where the duration is random between 2 bounds as Gatling Expression Language strings. These
     * expressions must resolve to either a number, then the unit will be seconds, or an object with an explicit time unit.
     *
     * @param min - the duration of the pace
     * @param max - the duration of the pace
     * @param counterName - the name of the loop counter, as stored in the Session
     * @returns a new StructureBuilder
     */
    (min: string, max: string, counterName: string): T;
    /**
     * Attach a pace action where the duration is random between 2 bounds
     *
     * @param min - the duration of the pace as a function
     * @param max - the duration of the pace as a function
     * @param counterName - the name of the loop counter, as stored in the Session
     * @returns a new StructureBuilder
     */
    (min: SessionTo<Duration>, max: SessionTo<Duration>, counterName: string): T;
}
export interface Paces<T extends Paces<T>> {
    pace: PaceFunction<T>;
}
export declare const paceImpl: <J2, J1 extends JvmPaces<J2, any>, T extends Paces<T>>(jvmGroups: J1, wrap: (wrapped: J2) => T) => PaceFunction<T>;
