import type { Expandable } from '../expandable';
import type { EntityBase } from '../entity-base';
import type { EdmTypeShared } from '../edm-types';
import type { Selectable } from '../selectable';
import type { Orderable } from '../order';
import type { Filterable } from '../filter';
import type { DeSerializers } from '../de-serializers';
import type { EntityApi } from '../entity-api';
/**
 * Union of necessary methods for the OData URI conversion.
 * In v2/uri-conversion/odata-uri.ts and v4/uri-conversion/odata-uri.ts the instance for v2 and v4 are created.
 */
export interface ODataUri<DeSerializersT extends DeSerializers> {
    getExpand<EntityT extends EntityBase>(selects: Selectable<EntityT, DeSerializersT>[], expands: Expandable<EntityT, DeSerializersT>[], entityApi: EntityApi<EntityT, DeSerializersT>): Partial<{
        expand: string;
    }>;
    getFilter<EntityT extends EntityBase>(filter: Filterable<EntityT, DeSerializersT>, entityApi: EntityApi<EntityT, DeSerializersT>): Partial<{
        filter: string;
    }>;
    getEntityKeys<EntityT extends EntityBase>(entity: EntityT, entityApi: EntityApi<EntityT, DeSerializersT>): Record<string, any>;
    getOrderBy<EntityT extends EntityBase>(orderBy: Orderable<EntityT>[]): Partial<{
        orderby: string;
    }>;
    getResourcePathForKeys<EntityT extends EntityBase>(keys: Record<string, any>, _entityApi: EntityApi<EntityT, DeSerializersT>): string;
    getSelect<EntityT extends EntityBase>(selects: Selectable<EntityT, DeSerializersT>[]): Partial<{
        select: string;
    }>;
    convertToUriFormat(value: any, edmType: EdmTypeShared<'v2'> | EdmTypeShared<'v4'>): string;
}
/**
 * @internal
 * Add a dollar to a string.
 * @param param - String to be modified.
 * @returns The given string starting with a dollar.
 */
export declare function prependDollar(param: string): string;
/**
 * @internal
 * @param deSerializers - (De-)serializers used for transformation.
 * @param getExpand - `getExpand` function.
 * @param getSelect - `getSelect`function.
 * @returns An instance of ODataUri
 */
export declare function createODataUri<DeSerializersT extends DeSerializers>(deSerializers: DeSerializersT, getExpand: <EntityT extends EntityBase>(selects: Selectable<EntityT, DeSerializersT>[], expands: Expandable<EntityT, DeSerializersT>[], entityApi: EntityApi<EntityT, DeSerializersT>) => Partial<{
    expand: string;
}>, getSelect: <EntityT extends EntityBase>(selects: Selectable<EntityT, DeSerializersT>[]) => Partial<{
    select: string;
}>): ODataUri<DeSerializersT>;
