import { DeepPartial } from '@azure-tools/codegen';
import { Dictionary } from '@azure-tools/linq';
import { Schema } from '@autorest/codemodel';
import { Extensions } from './extensions';
export interface IOperationBase {
}
export interface IParameter extends Extensions {
    name: string;
    schema: Schema;
    description: string;
    allowEmptyValue: boolean;
    deprecated: boolean;
    required: boolean;
    details: LanguageDetails<ParameterDetails>;
}
export declare class IParameter extends Extensions {
    name: string;
    schema: Schema;
    constructor(name: string, schema: Schema, initializer?: DeepPartial<IParameter>);
}
export interface IOperation<TParameterType extends IParameter> extends IOperationBase {
    operationId: string;
    description: string;
    summary?: string;
    deprecated: boolean;
    parameters: Array<TParameterType>;
}
export interface Components<TOperation extends IOperation<TParameter>, TParameter extends IParameter> extends Extensions {
    operations: Dictionary<TOperation>;
    parameters: Dictionary<TParameter>;
}
export declare class Components<TOperation extends IOperation<TParameter>, TParameter extends IParameter> extends Extensions implements Components<TOperation, TParameter> {
    /**
     * Dictionary of Operations in this model.
     *
     * This is intended to invert the original PathItems in the OAI model, and focus on operations, not endpoints.
     */
    operations: Dictionary<TOperation>;
    constructor(initializer?: DeepPartial<Components<TOperation, TParameter>>);
}
export interface ParameterDetails extends ImplementationDetails {
}
export interface ResponseDetails extends ImplementationDetails {
    isErrorResponse: boolean;
}
/** LanguageDetails contains a map of languages to details for a given node in the code-model  */
export interface LanguageDetails<T extends ImplementationDetails> extends Dictionary<T> {
    default: T;
}
export interface ImplementationDetails extends Dictionary<any> {
    /** a unique id for correlation between cloned objects */
    uid: string;
    /** name used in actual implementation */
    name: string;
    /** description text */
    description: string;
    /** message used to go along with deprecation */
    deprecationMessage?: string;
    /** external docs description */
    externalDocs?: ExternalDocumentation;
}
export declare enum ImplementationLocation {
    Method = "Method",
    Client = "Client"
}
export declare class Example extends Extensions implements Example {
    extensions: Dictionary<any>;
    constructor(initializer?: DeepPartial<Example>);
}
export declare class ExternalDocumentation extends Extensions implements ExternalDocumentation {
    url: string;
    extensions: Dictionary<any>;
    constructor(url: string, initializer?: DeepPartial<ExternalDocumentation>);
}
export declare class Link extends Extensions implements Link {
    extensions: Dictionary<any>;
    parameters: Dictionary<string>;
    constructor(initializer?: DeepPartial<Link>);
}
export declare class Server extends Extensions implements Server {
    url: string;
    extensions: Dictionary<any>;
    variables: Dictionary<ServerVariable>;
    constructor(url: string, initializer?: DeepPartial<Server>);
}
export declare class ServerVariable extends Extensions implements ServerVariable {
    extensions: Dictionary<any>;
    enum: string[];
    constructor(defaultValue: string, initializer?: DeepPartial<ServerVariable>);
}
export declare class Tag extends Extensions implements Tag {
    name: string;
    extensions: Dictionary<any>;
    constructor(name: string, initializer?: DeepPartial<Tag>);
}
/**
 * @description common ways of serializing simple parameters
 * @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#style-values
 */
export interface SecurityRequirement extends Dictionary<string> {
}
export interface Example extends Extensions {
    summary?: string;
    description?: string;
    value?: any;
    externalValue?: string;
}
export interface ExternalDocumentation extends Extensions {
    description?: string;
    url: string;
}
export interface Link extends Extensions {
    operationRef?: string;
    operationId?: string;
    parameters: Dictionary<string>;
    requestBody?: any;
    description?: string;
    server?: Server;
}
export interface Server extends Extensions {
    url: string;
    description?: string;
    variables: Dictionary<ServerVariable>;
}
export interface ServerVariable extends Extensions {
    enum: Array<string>;
    default: string;
    description?: string;
}
export interface Tag extends Extensions {
    name: string;
    description?: string;
    externalDocs?: ExternalDocumentation;
}
//# sourceMappingURL=components.d.ts.map