/*
 * Asterisk -- An open source telephony toolkit.
 *
 * Copyright (C) 2013, Digium, Inc.
 *
 * See http://www.asterisk.org for more information about
 * the Asterisk project. Please do not directly contact
 * any of the maintainers of this project for assistance;
 * the project provides a web site, mailing lists and IRC
 * channels for your use.
 *
 * This program is free software, distributed under the terms of
 * the GNU General Public License Version 2. See the LICENSE file
 * at the top of the source tree.
 */

/*! \file
 *
 * \brief Generated file - Build validators for ARI model objects.
 *
 * In addition to the normal validation functions one would normally expect,
 * each validator has a ast_ari_validate_{id}_fn() companion function that returns
 * the validator's function pointer.
 *
 * The reason for this seamingly useless indirection is the way function
 * pointers interfere with module loading. Asterisk attempts to dlopen() each
 * module using \c RTLD_LAZY in order to read some metadata from the module.
 * Unfortunately, if you take the address of a function, the function has to be
 * resolvable at load time, even if \c RTLD_LAZY is specified. By moving the
 * function-address-taking into this module, we can once again be lazy.
 */

 /*
{{> do-not-edit}}
 * This file is generated by a mustache template. Please see the original
 * template in rest-api-templates/ari_model_validators.h.mustache
 */

#ifndef _ASTERISK_ARI_MODEL_H
#define _ASTERISK_ARI_MODEL_H

#include "asterisk/json.h"

/*! @{ */

/*!
 * \brief Validator for native Swagger void.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_void(struct ast_json *json);

/*!
 * \brief Validator for native Swagger object.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_object(struct ast_json *json);

/*!
 * \brief Validator for native Swagger byte.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_byte(struct ast_json *json);

/*!
 * \brief Validator for native Swagger boolean.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_boolean(struct ast_json *json);

/*!
 * \brief Validator for native Swagger int.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_int(struct ast_json *json);

/*!
 * \brief Validator for native Swagger long.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_long(struct ast_json *json);

/*!
 * \brief Validator for native Swagger float.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_float(struct ast_json *json);

/*!
 * \brief Validator for native Swagger double.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_double(struct ast_json *json);

/*!
 * \brief Validator for native Swagger string.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_string(struct ast_json *json);

/*!
 * \brief Validator for native Swagger date.
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_date(struct ast_json *json);

/*!
 * \brief Validator for a Swagger List[]/JSON array.
 *
 * \param json JSON object to validate.
 * \param fn Validator to call on every element in the array.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_list(struct ast_json *json, int (*fn)(struct ast_json *));

/*! @} */

/*!
 * \brief Function type for validator functions. Allows for 
 */
typedef int (*ari_validator)(struct ast_json *json);
{{#apis}}
{{#api_declaration}}
{{#models}}

/*!
 * \brief Validator for {{id}}.
 *
 * {{{description_dox}}}
 *
 * \param json JSON object to validate.
 * \returns True (non-zero) if valid.
 * \returns False (zero) if invalid.
 */
int ast_ari_validate_{{c_id}}(struct ast_json *json);

/*!
 * \brief Function pointer to ast_ari_validate_{{c_id}}().
 *
 * See \ref ast_ari_model_validators.h for more details.
 */
ari_validator ast_ari_validate_{{c_id}}_fn(void);
{{/models}}
{{/api_declaration}}
{{/apis}}

/*
 * JSON models
 *
{{#apis}}
{{#api_declaration}}
{{#models}}
 * {{id}}
{{#properties}}
 * - {{name}}: {{type.name}}{{#required}} (required){{/required}}
{{/properties}}
{{/models}}
{{/api_declaration}}
{{/apis}} */

#endif /* _ASTERISK_ARI_MODEL_H */
