import { Resource } from '../models/resource';
import { ResourceArray } from '../models/resource-array';
import { Sort } from '../models/sort';
import { SubTypeBuilder } from '../models/subtype-builder';
import { Observable } from 'rxjs/internal/Observable';
import { Injector } from '@angular/core';
export declare type HalParam = {
    key: string;
    value: string | number | boolean;
};
export declare type HalOptions = {
    notPaged?: boolean;
    size?: number;
    sort?: Sort[];
    params?: HalParam[];
};
export declare class RestService<T extends Resource> {
    private injector;
    private type;
    private resource;
    resourceArray: ResourceArray<T>;
    private resourceService;
    private _embedded;
    constructor(type: {
        new (): T;
    }, resource: string, injector: Injector, _embedded?: string);
    protected handleError(error: any): Observable<never>;
    protected static handleError(error: any): Observable<never>;
    getAll(options?: HalOptions, subType?: SubTypeBuilder): Observable<T[]>;
    get(id: any, params?: HalParam[], builder?: SubTypeBuilder): Observable<T>;
    selfURI(id: any): string;
    getBySelfLink(selfLink: string): Observable<T>;
    search(query: string, options?: HalOptions, subType?: SubTypeBuilder): Observable<T[]>;
    query(query: string, options?: HalOptions): Observable<any>;
    searchSingle(query: string, options?: HalOptions): Observable<T>;
    customQuery(query: string, options?: HalOptions, subType?: SubTypeBuilder): Observable<T[]>;
    customQueryPost(query: string, options?: HalOptions, body?: any, subType?: SubTypeBuilder): Observable<T[]>;
    getByRelationArray(relation: string, builder?: SubTypeBuilder): Observable<T[]>;
    getByRelation(relation: string): Observable<T>;
    count(query?: string, options?: HalOptions): Observable<number>;
    create(entity: T): Observable<Observable<never> | T>;
    update(entity: T): Observable<Observable<never> | T>;
    patch(entity: T): Observable<Observable<never> | T>;
    delete(entity: T): Observable<Object>;
    totalElement(): number;
    totalPages(): number;
    hasFirst(): boolean;
    hasNext(): boolean;
    hasPrev(): boolean;
    hasLast(): boolean;
    next(): Observable<T[]>;
    prev(): Observable<T[]>;
    first(): Observable<T[]>;
    last(): Observable<T[]>;
    page(pageNumber: number): Observable<T[]>;
}
