/**
 * This file is part of the @egodigital/egoose distribution.
 * Copyright (c) e.GO Digital GmbH, Aachen, Germany (https://www.e-go-digital.com/)
 *
 * @egodigital/egoose is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, version 3.
 *
 * @egodigital/egoose is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
import * as express from 'express';
import * as joi from 'joi';
import { OptionsJson } from 'body-parser';
/**
 * Options for 'jsonObject()' function.
 */
export interface JsonObjectOptions {
    /**
     * Indicates if input body can be (null) or not.
     */
    canBeNull?: boolean;
    /**
     * Indicates if input body can be (undefined) or not.
     */
    canBeUndefined?: boolean;
    /**
     * A custom function, that handles a failed validation.
     */
    failedHandler?: JsonObjectValidationFailedHandler;
    /**
     * Custom options for the Express json() middleware.
     */
    options?: OptionsJson;
    /**
     * The optional schema to use.
     */
    schema?: joi.ObjectSchema;
}
/**
 * A function that returns the response for a failed JSON validation.
 *
 * @param {JsonObjectValidationFailedHandlerContext} context The context.
 *
 * @return {express.Response|PromiseLike<express.Response>} The result with the (new) response context.
 */
export declare type JsonObjectValidationFailedHandler = (context: JsonObjectValidationFailedHandlerContext) => (express.Response | PromiseLike<express.Response>);
/**
 * Context of a 'JsonValidationFailedHandler'.
 */
export interface JsonObjectValidationFailedHandlerContext {
    /**
     * The original value of the request body.
     */
    body: any;
    /**
     * An object or value, whichs contains the validation error details.
     */
    details: any;
    /**
     * An object or value, which represents an ID, that describes the reason.
     */
    reason: any;
    /**
     * The current HTTP request context.
     */
    request: express.Request;
    /**
     * The current HTTP response context.
     */
    response: express.Response;
}
/**
 * Creates Express middlewares for validating JSON input.
 *
 * @param {JsonObjectOptions|joi.ObjectSchema} [optsOrSchema] Custom options or schema.
 *
 * @return {express.RequestHandler[]} The created handler(s).
 */
export declare function jsonObject(optsOrSchema?: JsonObjectOptions | joi.ObjectSchema): express.RequestHandler[];
