import { Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { BaseResource } from '../../model/resource/base-resource';
import { GetOption, RequestOption } from '../../model/declarations';
import { HttpExecutor } from '../http-executor';
import { ResourceCacheService } from './cache/resource-cache.service';
import { ResourceOption } from '../../config/hateoas-configuration.interface';
import * as i0 from "@angular/core";
/**
 * Get instance of the ResourceHttpService by Angular DependencyInjector.
 */
export declare function getResourceHttpService(): ResourceHttpService;
/**
 * Service to perform HTTP requests to get {@link Resource} type.
 */
export declare class ResourceHttpService extends HttpExecutor {
    constructor(httpClient: HttpClient, cacheService: ResourceCacheService);
    /**
     * Perform GET request to retrieve resource.
     *
     * @param url to perform request
     * @param options request options
     * @throws error when required params are not valid or returned resource type is not resource
     */
    get<T extends BaseResource>(url: string, options?: GetOption): Observable<T>;
    /**
     * Perform POST request.
     *
     * @param url to perform request
     * @param body request body
     * @param options request options
     * @throws error when required params are not valid
     */
    post(url: string, body: any | null, options?: RequestOption): Observable<any>;
    /**
     * Perform PUT request.
     *
     * @param url to perform request
     * @param body request body
     * @param options request options
     * @throws error when required params are not valid
     */
    put(url: string, body: any | null, options?: RequestOption): Observable<any>;
    /**
     * Perform PATCH request.
     *
     * @param url to perform request
     * @param body request body
     * @param options request options
     * @throws error when required params are not valid
     */
    patch(url: string, body: any | null, options?: RequestOption): Observable<any>;
    /**
     * Perform DELETE request.
     *
     * @param url to perform request
     * @param options request options
     * @throws error when required params are not valid
     */
    delete(url: string, options?: RequestOption): Observable<any>;
    /**
     * Perform get resource request with url built by the resource name.
     *
     * @param resourceName used to build root url to the resource
     * @param resourceOptions additional resource options {@link ResourceOption}
     * @param id resource id
     * @param options (optional) options that applied to the request
     * @throws error when required params are not valid
     */
    getResource<T extends BaseResource>(resourceName: string, resourceOptions: ResourceOption, id: number | string, options?: GetOption): Observable<T>;
    /**
     * Perform POST resource request with url built by the resource name.
     *
     * @param resourceName to be post
     * @param resourceOptions additional resource options {@link ResourceOption}
     * @param body resource to create
     * @param options (optional) options that applied to the request
     * @throws error when required params are not valid
     */
    postResource(resourceName: string, resourceOptions: ResourceOption, body: BaseResource, options?: RequestOption): Observable<any>;
    /**
     * Perform PATCH resource request with url built by the resource name and resource id.
     *
     * @param resourceName to be patched
     * @param resourceOptions additional resource options {@link ResourceOption}
     * @param id resource id
     * @param body contains data to patch resource properties
     * @param options (optional) options that applied to the request
     * @throws error when required params are not valid
     */
    patchResource(resourceName: string, resourceOptions: ResourceOption, id: number | string, body: any, options?: RequestOption): Observable<any>;
    /**
     * Perform PUT resource request with url built by the resource name and resource id.
     *
     * @param resourceName to be put
     * @param resourceOptions additional resource options {@link ResourceOption}
     * @param id resource id
     * @param body contains data to replace resource properties
     * @param options (optional) options that applied to the request
     * @throws error when required params are not valid
     */
    putResource(resourceName: string, resourceOptions: ResourceOption, id: number | string, body: any, options?: RequestOption): Observable<any>;
    /**
     * Perform DELETE resource request with url built by the resource name and resource id.
     *
     * @param resourceName to be deleted
     * @param resourceOptions additional resource options {@link ResourceOption}
     * @param id resource id
     * @param options (optional) additional options that will be applied to the request
     * @throws error when required params are not valid
     */
    deleteResource(resourceName: string, resourceOptions: ResourceOption, id: number | string, options?: RequestOption): Observable<any>;
    /**
     * Perform search single resource request with url built by the resource name.
     *
     * @param resourceName used to build root url to the resource
     * @param resourceOptions additional resource options {@link ResourceOption}
     * @param searchQuery name of the search method
     * @param options (optional) options that applied to the request
     * @throws error when required params are not valid
     */
    search<T extends BaseResource>(resourceName: string, resourceOptions: ResourceOption, searchQuery: string, options?: GetOption): Observable<T>;
    static ɵfac: i0.ɵɵFactoryDeclaration<ResourceHttpService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ResourceHttpService>;
}
