import { DateTimeRange } from "../DataTypes/DateTimeRange";
export declare type QueryObject = any;
export interface Mapper<T> {
    parse(parsedQueryString: QueryObject): Nullable<T>;
    stringify(parsedQueryString: QueryObject, value: Nullable<T>): QueryObject;
}
export declare class PlainValueMapper<T> implements Mapper<T> {
    parameterName: string;
    constructor(queryStringParameterName: string);
    parseString(_parameterValue: string): Nullable<T>;
    stringifyValue(_value: Nullable<T>): Nullable<string>;
    protected parseEmpty(): Nullable<T>;
    parse(parsedQueryString: QueryObject): Nullable<T>;
    stringify(parsedQueryString: QueryObject, value: Nullable<T>): QueryObject;
}
export declare class IntegerMapper extends PlainValueMapper<number> {
    defaultValue: null | number;
    constructor(queryStringParameterName: string, defaultValue: Nullable<number>);
    parseString(parameterValue: string): Nullable<number>;
    protected parseEmpty(): Nullable<number>;
    stringifyValue(value: Nullable<number>): any;
}
export declare class StringArrayMapper extends PlainValueMapper<string[]> {
    defaultValue: null | Nullable<string[]>;
    constructor(queryStringParameterName: string, defaultValue: Nullable<string[]>);
    protected parseEmpty(): Nullable<any[]>;
    parseString(parameterValue: Nullable<string>): Nullable<string[]>;
    stringifyValue(value: null | undefined | string[]): Nullable<string>;
}
export declare class DateTimeRangeMapper {
    private readonly parameterName;
    private readonly defaultValue;
    constructor(queryStringParameterPrefix: string, defaultValue: null | DateTimeRange);
    parseDate(parameterValue: Nullable<string>): Nullable<Date>;
    stringifyDate(value: Nullable<Date>): Nullable<string>;
    parse(parsedQueryString: QueryObject): Nullable<DateTimeRange>;
    stringify(parsedQueryString: QueryObject, value: Nullable<DateTimeRange>): QueryObject;
    isDefaultValue(value: DateTimeRange): boolean;
}
export declare class StringMapper extends PlainValueMapper<string> {
    defaultValue: null | string;
    constructor(queryStringParameterName: string, defaultValue: Nullable<string>);
    parseEmpty(): Nullable<string>;
    parseString(parameterValue: string): Nullable<string>;
    stringifyValue(value: Nullable<string>): any;
}
export declare class SetMapper<T> extends PlainValueMapper<T[]> {
    enumValues: {
        [key: string]: T;
    };
    allowNegationOperator: boolean;
    static nullValueString: string;
    constructor(queryStringParameterName: string, enumValues: {
        [key: string]: T;
    }, allowNegationOperator: boolean);
    parseString(parameterValue: string): Nullable<T[]>;
    buildPositiveValuesString(values: T[]): string;
    buildNegativeValuesString(values: T[]): string;
    stringifyValue(value: Nullable<T[]>): Nullable<string>;
    protected getString(value: T): string | null;
    protected getKeys(): string[];
    protected getEnumValue(repr: string): T;
}
