import { DeepPartial } from "@azure-tools/codegen";
import { Parameter } from "../parameter";
import { Property } from "../property";
import { Schema, ComplexSchema } from "../schema";
import { SchemaType } from "../schema-type";
import { SchemaUsage } from "./usage";
export interface Relations {
    immediate: Array<ComplexSchema>;
    all: Array<ComplexSchema>;
}
export declare class Relations {
    constructor();
}
export interface Discriminator {
    property: Property;
    immediate: Record<string, ComplexSchema>;
    all: Record<string, ComplexSchema>;
}
export declare class Discriminator implements Discriminator {
    property: Property;
    constructor(property: Property);
}
export interface GroupProperty extends Property {
    originalParameter: Array<Parameter>;
}
export declare class GroupProperty extends Property implements GroupProperty {
    originalParameter: Parameter[];
    constructor(name: string, description: string, schema: Schema, initializer?: DeepPartial<GroupProperty>);
}
export interface GroupSchema extends Schema, SchemaUsage {
    type: SchemaType.Group;
    properties?: Array<GroupProperty>;
}
export declare class GroupSchema extends Schema implements GroupSchema {
    constructor(name: string, description: string, objectInitializer?: DeepPartial<GroupSchema>);
    add(property: GroupProperty): GroupProperty;
}
/** a schema that represents a type with child properties. */
export interface ObjectSchema extends ComplexSchema, SchemaUsage {
    /** the schema type  */
    type: SchemaType.Object;
    /** the property of the polymorphic descriminator for this type, if there is one */
    discriminator?: Discriminator;
    /** the collection of properties that are in this object */
    properties?: Array<Property>;
    /**  maximum number of properties permitted */
    maxProperties?: number;
    /**  minimum number of properties permitted */
    minProperties?: number;
    parents?: Relations;
    children?: Relations;
    discriminatorValue?: string;
}
export declare class ObjectSchema extends Schema implements ObjectSchema {
    constructor(name: string, description: string, objectInitializer?: DeepPartial<ObjectSchema>);
    addProperty(property: Property): Property;
}
export declare function isObjectSchema(schema: Schema): schema is ObjectSchema;
export declare function getAllProperties(schema: ObjectSchema): Iterable<Property>;
export declare function getAllParentProperties(schema: ObjectSchema): Iterable<Property>;
//# sourceMappingURL=object.d.ts.map