import { ODataContext, ODataVersionHelper } from './helper';
import { ODataMetadataType } from './types';
export declare abstract class ODataAnnotations<T> {
    helper: ODataVersionHelper;
    protected annotations: Map<string, any>;
    protected context?: ODataContext | undefined;
    constructor(helper: ODataVersionHelper, annotations?: Map<string, any>, context?: ODataContext | undefined);
    attributes(data: {
        [name: string]: any;
    }, metadata: ODataMetadataType): Partial<T>;
    update(data: {
        [name: string]: any;
    }): void;
    get entitySet(): string | undefined;
    get type(): string | undefined;
    abstract union(other: ODataAnnotations<any>): ODataAnnotations<any>;
    abstract clone(): ODataAnnotations<any>;
    abstract data(data: {
        [name: string]: any;
    }): {
        [name: string]: any;
    };
}
export declare class ODataPropertyAnnotations<T> extends ODataAnnotations<T> {
    union(other: ODataPropertyAnnotations<any>): ODataPropertyAnnotations<any>;
    clone(): ODataPropertyAnnotations<any>;
    data(data: {
        [name: string]: any;
    }): any;
}
export declare class ODataEntityAnnotations<T> extends ODataAnnotations<T> {
    union(other: ODataEntityAnnotations<any>): ODataEntityAnnotations<any>;
    clone(): ODataEntityAnnotations<any>;
    data(data: {
        [name: string]: any;
    }): any;
    get id(): string | undefined;
    get etag(): string | undefined;
    get mediaEtag(): string | undefined;
    get metadataEtag(): string | undefined;
    get readLink(): string | undefined;
    get editLink(): string | undefined;
    get mediaReadLink(): string | undefined;
    get mediaEditLink(): string | undefined;
    get mediaContentType(): string | undefined;
    private _properties?;
    get properties(): Map<keyof T, Map<string, any>>;
    property<F>(name: keyof T, type: 'collection'): ODataEntitiesAnnotations<F>;
    property<F>(name: keyof T, type: 'single'): ODataEntityAnnotations<F>;
    private _functions?;
    get functions(): {
        [name: string]: any;
    };
    function(name: string): any;
}
export declare class ODataEntitiesAnnotations<T> extends ODataAnnotations<T> {
    union(other: ODataEntitiesAnnotations<any>): ODataEntitiesAnnotations<any>;
    clone(): ODataEntitiesAnnotations<any>;
    data(data: {
        [name: string]: any;
    }): any;
    get readLink(): string | undefined;
    get count(): number | undefined;
    get nextLink(): string | undefined;
    get deltaLink(): string | undefined;
    get top(): number | undefined;
    get skip(): number | undefined;
    get skiptoken(): string | undefined;
    private _functions?;
    get functions(): {
        [name: string]: any;
    };
    function(name: string): any;
    entity(): ODataEntityAnnotations<T>;
}
