import type { PrimitiveType, StringType } from "./BuiltInTypes.js";
import type { Documentation, Locator, Safety } from "./Common.js";
export interface ObjectSpec {
    properties: {
        [key: string]: PropertySpec;
    };
}
export interface PropertySpec {
    type: DataType;
    safety: Safety;
    documentation: Documentation;
}
export interface ObjectType {
    type: "object";
    object: ObjectSpec;
}
export interface BuiltInType {
    type: "builtin";
    builtin: PrimitiveType;
}
export interface UnionType {
    type: "union";
    union: {
        discriminator: string;
        subTypes: {
            [key: string]: {
                type: ReferenceType;
            };
        };
    };
}
export interface EnumType {
    type: "enum";
    enum: {
        values: string[];
    };
}
export interface BinaryType {
    type: "binary";
    binary: {
        mediaType: string;
    };
}
export interface AsyncOperationType {
    type: "asyncOperation";
    asyncOperation: {
        operationType: string;
        resultType: {
            locator: Locator;
        };
        stageType: {
            locator: Locator;
        };
    };
}
export interface OptionalType {
    type: "optional";
    optional: {
        subType: DataType;
    };
}
export interface ListType {
    type: "list";
    list: {
        subType: DataType;
        minItems?: number;
        maxItems?: number;
    };
}
export interface ReferenceType {
    type: "reference";
    reference: {
        locator: Locator;
    };
}
export interface MapType {
    type: "map";
    map: {
        keyType: DataType;
        valueType: DataType;
    };
}
export interface ExternalType {
    type: "external";
    external: string | {
        baseType: DataType;
        java?: unknown;
    };
}
export type DataType = ObjectType | BuiltInType | ReferenceType | ListType | OptionalType | UnionType | EnumType | MapType | BinaryType | ExternalType | AsyncOperationType | StringType;
//# sourceMappingURL=DataTypes.d.ts.map