import { type Combine, type StrictOmit, type TypeThunkAsync } from 'ts-gems';
import type { OpraSchema } from '../../schema/index.js';
import type { ApiDocument } from '../api-document';
import { DocumentElement } from '../common/document-element.js';
import { Value } from '../common/value.js';
import { DataType } from '../data-type/data-type.js';
import type { EnumType } from '../data-type/enum-type.js';
/**
 * @namespace HttpParameter
 */
export declare namespace HttpParameter {
    interface Metadata extends StrictOmit<OpraSchema.HttpParameter, 'type'> {
        name: string | RegExp;
        type?: string | TypeThunkAsync | EnumType.EnumObject | EnumType.EnumArray | object;
        keyParam?: boolean;
    }
    interface Options extends Partial<StrictOmit<Metadata, 'type'>> {
        type?: string | TypeThunkAsync | object;
        parser?: (v: any) => any;
    }
    interface InitArguments extends Combine<{
        type?: DataType;
    }, Metadata> {
        parser?: (v: any) => any;
    }
}
/**
 * Type definition for HttpParameter
 * @class HttpParameter
 */
interface HttpParameterStatic {
    new (owner: DocumentElement, args: HttpParameter.InitArguments): HttpParameter;
    prototype: HttpParameter;
}
/**
 * Type definition of HttpParameter prototype
 * @interface HttpParameter
 */
export interface HttpParameter extends HttpParameterClass {
}
export declare const HttpParameter: HttpParameterStatic;
/**
 * @class HttpParameter
 */
declare class HttpParameterClass extends Value {
    readonly owner: DocumentElement;
    location: OpraSchema.HttpParameterLocation;
    keyParam?: boolean;
    deprecated?: boolean | string;
    required?: boolean;
    arraySeparator?: string;
    parser?: (v: any) => any;
    toJSON(options?: ApiDocument.ExportOptions): OpraSchema.HttpParameter;
}
export {};
