import * as type from './type.js';
export type ParameterKind = 'required' | 'optional' | 'literal' | 'flag' | ClientSideDefault;
export interface ClientSideDefault {
    defaultValue: type.LiteralValue;
}
export interface Parameter {
    name: string;
    docs: type.Docs;
    type: type.PossibleType;
    kind: ParameterKind;
    byValue: boolean;
    group?: ParameterGroup;
    location: ParameterLocation;
}
export declare function isClientSideDefault(kind: ParameterKind): kind is ClientSideDefault;
export type ParameterLocation = 'client' | 'method';
export interface ParameterGroup {
    name: string;
    docs: type.Docs;
    groupName: string;
    required: boolean;
    location: ParameterLocation;
    params: Array<Parameter>;
}
export type HeaderType = type.BytesType | type.ConstantType | type.PrimitiveType | type.TimeType | type.LiteralValue;
export interface HeaderParameter extends Parameter {
    headerName: string;
    type: HeaderType;
}
export type CollectionFormat = 'csv' | 'ssv' | 'tsv' | 'pipes';
export interface HeaderCollectionParameter extends Parameter {
    headerName: string;
    type: type.SliceType;
    collectionFormat: CollectionFormat;
}
export interface HeaderMapParameter extends Parameter {
    headerName: string;
    type: type.MapType;
    collectionPrefix: string;
}
export type PathParameterType = type.BytesType | type.ConstantType | type.PrimitiveType | type.TimeType | type.LiteralValue;
export interface PathParameter extends Parameter {
    pathSegment: string;
    type: PathParameterType;
    isEncoded: boolean;
}
export interface PathCollectionParameter extends Parameter {
    pathSegment: string;
    type: type.SliceType;
    isEncoded: boolean;
    collectionFormat: CollectionFormat;
}
export type QueryParameterType = type.BytesType | type.ConstantType | type.PrimitiveType | type.TimeType | type.LiteralValue;
export interface QueryParameter extends Parameter {
    queryParameter: string;
    type: QueryParameterType;
    isEncoded: boolean;
}
export type ExtendedCollectionFormat = CollectionFormat | 'multi';
export interface QueryCollectionParameter extends Parameter {
    queryParameter: string;
    type: type.SliceType;
    isEncoded: boolean;
    collectionFormat: ExtendedCollectionFormat;
}
export type URIParameterType = type.ConstantType | type.PrimitiveType;
export interface URIParameter extends Parameter {
    uriPathSegment: string;
    type: URIParameterType;
}
export type BodyFormat = 'JSON' | 'XML' | 'Text' | 'binary';
export interface BodyParameter extends Parameter {
    bodyFormat: BodyFormat;
    contentType: string;
    xml?: type.XMLInfo;
}
export interface PartialBodyParameter extends Parameter {
    serializedName: string;
    format: 'JSON' | 'XML';
    xml?: type.XMLInfo;
}
export interface FormBodyParameter extends Parameter {
    formDataName: string;
}
export interface FormBodyCollectionParameter extends Parameter {
    formDataName: string;
    type: type.SliceType;
    collectionFormat: ExtendedCollectionFormat;
}
export interface MultipartFormBodyParameter extends Parameter {
    multipartForm: true;
}
export interface ResumeTokenParameter extends Parameter {
    isResumeToken: true;
}
export declare function isBodyParameter(param: Parameter): param is BodyParameter;
export declare function isPartialBodyParameter(param: Parameter): param is PartialBodyParameter;
export declare function isFormBodyParameter(param: Parameter): param is FormBodyParameter;
export declare function isFormBodyCollectionParameter(param: Parameter): param is FormBodyCollectionParameter;
export declare function isMultipartFormBodyParameter(param: Parameter): param is MultipartFormBodyParameter;
export declare function isHeaderParameter(param: Parameter): param is HeaderParameter;
export declare function isHeaderCollectionParameter(param: Parameter): param is HeaderCollectionParameter;
export declare function isHeaderMapParameter(param: Parameter): param is HeaderMapParameter;
export declare function isPathParameter(param: Parameter): param is PathParameter;
export declare function isPathCollectionParameter(param: Parameter): param is PathCollectionParameter;
export declare function isQueryParameter(param: Parameter): param is QueryParameter;
export declare function isQueryCollectionParameter(param: Parameter): param is QueryCollectionParameter;
export declare function isURIParameter(param: Parameter): param is URIParameter;
export declare function isResumeTokenParameter(param: Parameter): param is ResumeTokenParameter;
export declare function isRequiredParameter(param: Parameter): boolean;
export declare function isLiteralParameter(param: Parameter): boolean;
export declare class Parameter implements Parameter {
    constructor(name: string, type: type.PossibleType, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class BodyParameter extends Parameter implements BodyParameter {
    constructor(name: string, bodyFormat: BodyFormat, contentType: string, type: type.PossibleType, kind: ParameterKind, byValue: boolean);
}
export declare class PartialBodyParameter extends Parameter implements PartialBodyParameter {
    constructor(name: string, serializedName: string, format: 'JSON' | 'XML', type: type.PossibleType, kind: ParameterKind, byValue: boolean);
}
export declare class FormBodyParameter extends Parameter implements FormBodyParameter {
    constructor(name: string, formDataName: string, type: type.PossibleType, kind: ParameterKind, byValue: boolean);
}
export declare class FormBodyCollectionParameter extends Parameter implements FormBodyCollectionParameter {
    constructor(name: string, formDataName: string, type: type.SliceType, collectionFormat: ExtendedCollectionFormat, kind: ParameterKind, byValue: boolean);
}
export declare class MultipartFormBodyParameter extends Parameter implements MultipartFormBodyParameter {
    constructor(name: string, type: type.PossibleType, kind: ParameterKind, byValue: boolean);
}
export declare class HeaderParameter extends Parameter implements HeaderParameter {
    constructor(name: string, headerName: string, type: HeaderType, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class HeaderCollectionParameter extends Parameter implements HeaderCollectionParameter {
    constructor(name: string, headerName: string, type: type.SliceType, collectionFormat: CollectionFormat, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class HeaderMapParameter extends Parameter implements HeaderMapParameter {
    constructor(name: string, headerName: string, type: type.MapType, collectionPrefix: string, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class PathParameter extends Parameter implements PathParameter {
    constructor(name: string, pathSegment: string, isEncoded: boolean, type: PathParameterType, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class PathCollectionParameter extends Parameter implements PathCollectionParameter {
    constructor(name: string, pathSegment: string, isEncoded: boolean, type: type.SliceType, collectionFormat: CollectionFormat, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class QueryParameter extends Parameter implements QueryParameter {
    constructor(name: string, queryParam: string, isEncoded: boolean, type: QueryParameterType, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class QueryCollectionParameter extends Parameter implements QueryCollectionParameter {
    constructor(name: string, queryParam: string, isEncoded: boolean, type: type.SliceType, collectionFormat: ExtendedCollectionFormat, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class URIParameter extends Parameter implements URIParameter {
    constructor(name: string, uriPathSegment: string, type: type.ConstantType | type.PrimitiveType, kind: ParameterKind, byValue: boolean, location: ParameterLocation);
}
export declare class ResumeTokenParameter extends Parameter implements ResumeTokenParameter {
    constructor();
}
export declare class ClientSideDefault implements ClientSideDefault {
    constructor(defaultValue: type.LiteralValue);
}
export declare class ParameterGroup implements ParameterGroup {
    constructor(name: string, groupName: string, required: boolean, location: ParameterLocation);
}
//# sourceMappingURL=param.d.ts.map