import { Observable } from 'rxjs';
import { ODataApi } from '../../api';
import { ModelInterface, ODataModel } from '../../models';
import { QueryOption } from '../../types';
import { ODataPathSegments } from '../path';
import { ODataQueryOptions } from '../query';
import { ODataResource } from '../resource';
import { ODataEntity } from '../response';
import { ODataActionResource } from './action';
import { ODataFunctionResource } from './function';
import { ODataMediaResource } from './media';
import { ODataNavigationPropertyResource } from './navigation-property';
import { ODataOptions } from './options';
import { ODataPropertyResource } from './property';
export declare class ODataEntityResource<T> extends ODataResource<T> {
    static factory<E>(api: ODataApi, { segments, query, }: {
        segments: ODataPathSegments;
        query?: ODataQueryOptions<E>;
    }): ODataEntityResource<E>;
    clone(): ODataEntityResource<T>;
    key(value: any): ODataEntityResource<T>;
    keys(values: any[]): ODataEntityResource<T>;
    media(): ODataMediaResource;
    navigationProperty<N>(path: string): ODataNavigationPropertyResource<N>;
    property<P>(path: string): ODataPropertyResource<P>;
    action<P, R>(path: string): ODataActionResource<P, R>;
    function<P, R>(path: string): ODataFunctionResource<P, R>;
    cast<C>(type: string): ODataEntityResource<C>;
    protected post(attrs: Partial<T>, options?: ODataOptions): Observable<any>;
    protected put(attrs: Partial<T>, options?: ODataOptions): Observable<any>;
    protected patch(attrs: Partial<T>, options?: ODataOptions): Observable<any>;
    protected delete(options?: ODataOptions): Observable<any>;
    protected get(options?: ODataOptions & {
        bodyQueryOptions?: QueryOption[];
    }): Observable<any>;
    create(attrs: Partial<T>, options?: ODataOptions): Observable<ODataEntity<T>>;
    update(attrs: Partial<T>, options?: ODataOptions): Observable<ODataEntity<T>>;
    modify(attrs: Partial<T>, options?: ODataOptions): Observable<ODataEntity<T>>;
    destroy(options?: ODataOptions): Observable<any>;
    fetch(options?: ODataOptions & {
        bodyQueryOptions?: QueryOption[];
    }): Observable<ODataEntity<T>>;
    fetchEntity(options?: ODataOptions & {
        bodyQueryOptions?: QueryOption[];
    }): Observable<T | null>;
    fetchModel(options?: ODataOptions & {
        bodyQueryOptions?: QueryOption[];
        ModelType?: typeof ODataModel;
    }): Observable<(ODataModel<T> & ModelInterface<T>) | null>;
    fetchModel<M extends ODataModel<T>>(options?: ODataOptions & {
        bodyQueryOptions?: QueryOption[];
        ModelType?: typeof ODataModel;
    }): Observable<M | null>;
}
