import { Aspect, HttpHeader, Metadata, OperationGroup, Parameter, Property, Security } from "@autorest/codemodel";
import { DeepPartial } from "@azure-tools/codegen";
import { ArrayKnownEncoding } from "@azure-tools/typespec-client-generator-core";
import { XmlSerializationFormat } from "./formats/xml.js";
export interface Client extends Aspect {
    /** All operations  */
    operationGroups: Array<OperationGroup>;
    globalParameters?: Array<Parameter>;
    security: Security;
    serviceVersion?: ServiceVersion;
    /**
     * Parent client of this client, if exists.
     */
    parent?: Client;
    /**
     * Sub clients of this client, if exists.
     */
    subClients: Array<Client>;
    /**
     * Whether the Builder class has a public method (e.g. "buildSubClient") to initiate this client.
     */
    buildMethodPublic: boolean;
    /**
     * Whether the parent client has a public accessor method (e.g. "getSubClient") to initiate this client.
     */
    parentAccessorPublic: boolean;
}
export declare class Client extends Aspect implements Client {
    constructor(name: string, description: string, objectInitializer?: DeepPartial<Client>);
    private get globals();
    addGlobalParameters(parameters: Parameter[]): void;
    /**
     * Add a sub Client to Client.
     *
     * @param subClient the sub Client
     * @param buildMethodPublic the sub Client can be initialized by its ClientBuilder
     * @param parentAccessorPublic the sub Client can be accessed by its parent Client
     */
    addSubClient(subClient: Client, buildMethodPublic: boolean, parentAccessorPublic: boolean): void;
}
export declare class ServiceVersion extends Metadata {
    constructor(name: string, description: string, initializer?: DeepPartial<ServiceVersion>);
}
export interface EncodedSchema {
    /**
     * The encoded type -- the type on wire.
     * E.g., the type for SDK maybe "int32", but type on wire be "string".
     */
    encode?: string;
}
export interface EncodedProperty {
    /**
     * The encoding of array items.
     * The type for SDK would "SdkArrayType" with a "valueType", the type on wire be "string".
     */
    arrayEncoding?: ArrayKnownEncoding;
}
export declare class PageableContinuationToken {
    /**
     * The parameter of the operation as continuationToken in API request.
     */
    parameter: Parameter;
    /**
     * The reference to response body property of the operation as continuationToken in API request.
     * Array because the property may be at "links.nextToken".
     */
    responseProperty?: Array<Property>;
    /**
     * The reference to response header of the operation as continuationToken in API request.
     */
    responseHeader?: HttpHeader;
    constructor(parameter: Parameter, responseProperty?: Property[], responseHeader?: HttpHeader);
}
export interface Serializable {
    /**
     * The serialization format for the type or property.
     */
    serialization?: {
        xml?: XmlSerializationFormat;
    };
}
//# sourceMappingURL=client.d.ts.map