export type HalLink = {
    deprecation?: string;
    href: string;
    hreflang?: string;
    name?: string;
    profile?: string;
    templated?: boolean;
    title?: string;
    type?: string;
};
type Links = Record<string, HalLink | HalLink[]>;
export type HalLinks<L extends Links = Record<string, never>> = L & {
    curies?: HalLink[];
    self?: HalLink;
};
export type HalDocument<E, L extends Links = Links> = {
    _embedded?: E;
    _links?: HalLinks<L>;
};
export type HalResource<R, E = any, L extends Links = Links> = R & HalDocument<E, L>;
export type HalPage = {
    number: number;
    size: number;
    totalElements: number;
    totalPages: number;
};
export type HalPageLinks = HalLinks<{
    first?: HalLink;
    last?: HalLink;
    next?: HalLink;
    prev?: HalLink;
}>;
export type HalPagedResource<E> = HalResource<{
    page?: HalPage;
}, E, HalPageLinks>;
/**
 * Creates a paged HAL resource.
 * @param embedded
 * @param page
 * @param links
 */
export declare function createHalPagedResource<E>(embedded: E, page: HalPage, links?: HalPageLinks): HalPagedResource<E>;
/**
 * Creates an HAL resource.
 * @param resource
 * @param embedded
 * @param links
 */
export declare function createHalResource<R, E, L extends Links = Links>(resource: R, embedded?: E, links?: L): HalResource<R, E, L>;
/**
 * Returns embedded from an HAL document.
 * @param doc
 */
export declare function getHalEmbedded<E, L extends Links>(doc: HalDocument<E, L>): E | undefined;
/**
 * Returns links from an HAL document.
 * @param doc
 */
export declare function getHalLinks<E, L extends Links>(doc: HalDocument<E, L>): L | undefined;
/**
 * Returns a specific link from an HAL document.
 * @param doc
 * @param link
 */
export declare function getHalLink<E, L extends Links>(doc: HalDocument<E, L>, link: keyof L): HalLinks<L>[keyof L] | undefined;
/**
 * Returns page from an HAL document.
 * @param doc
 */
export declare function getHalPage<E>(doc: HalPagedResource<E>): HalPage | undefined;
/**
 * Returns page number from an HAL document.
 * @param doc
 */
export declare function getHalPageNumber<E>(doc: HalPagedResource<E>): number | undefined;
/**
 * Returns page size from an HAL document.
 * @param doc
 */
export declare function getHalPageSize<E>(doc: HalPagedResource<E>): number | undefined;
/**
 * Returns total elements from an HAL document.
 * @param doc
 */
export declare function getHalPageTotalElements<E>(doc: HalPagedResource<E>): number | undefined;
/**
 * Returns total pages from an HAL document.
 * @param doc
 */
export declare function getHalPageTotalPages<E>(doc: HalPagedResource<E>): number | undefined;
export {};
//# sourceMappingURL=index.d.ts.map