import type { OpenApiSchema } from "../schema";
import type { OpenApiExtensionString } from "../types";
import type { OpenApiDocumentation } from "./OpenApiDocumentation";
import type { OpenApiExample } from "./OpenApiExample";
export declare class Root {
    toJSON(): unknown;
    override(overrideVal: unknown): this;
}
export interface RootInterface {
    /**
     * Serializes the object into its equivalent OpenApi JSON value.
     */
    toJSON(): unknown;
    /**
     * Overrides the toJSON method for a custom serialization.
     *
     * WARNING: overrideVal must be serializable and future changes are subject to breaking.
     *
     * @param overrideVal - Overrides the serialization of this object into this value.
     */
    override(overrideVal: unknown): this;
}
export interface BaseInterface extends RootInterface {
    /**
     * Extend the specification with an extension object schema.
     *
     * @param mappings - key value mappings with names MUST beginning with "x-"
     */
    addExtensions(mappings: {
        [K in OpenApiExtensionString]: OpenApiSchema;
    }): this;
}
export interface SchemaInterface<T> extends BaseInterface {
    /**
     * Adds a description to this OpenApiSchema
     *
     * @param description - Description
     */
    addDescription(description: string): this;
    /**
     * Adds an external documentation to this OpenApiSchema
     *
     * @param docs - Documentation to add to this schema.
     */
    addExternalDocs(docs: OpenApiDocumentation): this;
    addExample(example: any): this;
    addEnums(val: (T | null)[]): this;
    addDefault(val: T): this;
    addReadOnly(readOnly: boolean): this;
    addWriteOnly(writeOnly: boolean): this;
    /**
     * As of v3.1.0 this has been removed. Still available for v3.0.* OAS
     */
    addNullable(nullable: boolean): this;
}
declare const _Base: {
    new (...args: any[]): {
        _extensions?: Map<OpenApiExtensionString, OpenApiSchema | import("./OpenApiReferenceObject").OpenApiReferenceObject>;
        addExtensions(mappings: Partial<{
            [x: `x-${string}`]: import("./OpenApiReferenceObject").OpenApiReferenceObject | OpenApiSchema;
        }>): /*elided*/ any;
        toJSON(): unknown;
    };
} & typeof Root;
export declare class Base extends _Base implements BaseInterface {
}
declare const _SchemaBase: {
    new (...args: any[]): {
        _default?: unknown;
        addDefault(val: unknown): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _enum?: unknown[] | undefined;
        addEnums(val: unknown[]): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _nullable?: boolean;
        addNullable(val: boolean): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _writeOnly?: boolean;
        addWriteOnly(val: boolean): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _readOnly?: boolean;
        addReadOnly(val: boolean): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _examples?: Map<string, OpenApiExample | import("./OpenApiReferenceObject").OpenApiReferenceObject>;
        addExamples(mappings: Partial<{
            [x: string]: OpenApiExample | import("./OpenApiReferenceObject").OpenApiReferenceObject;
        }>): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _example?: any;
        addExample(val: any): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _externalDocs?: OpenApiDocumentation;
        addExternalDocs(val: OpenApiDocumentation): /*elided*/ any;
        toJSON(): unknown;
    };
} & {
    new (...args: any[]): {
        _description?: string;
        addDescription(val: string): /*elided*/ any;
        toJSON(): unknown;
    };
} & typeof Base;
export declare class SchemaBase<T> extends _SchemaBase implements SchemaInterface<T> {
}
export {};
