/**
 * @file schema_features.h
 * @author Michal Vasko <mvasko@cesnet.cz>
 * @brief Header for schema features.
 *
 * Copyright (c) 2015 - 2020 CESNET, z.s.p.o.
 *
 * This source code is licensed under BSD 3-Clause License (the "License").
 * You may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://opensource.org/licenses/BSD-3-Clause
 */

#ifndef LY_SCHEMA_FEATURES_H_
#define LY_SCHEMA_FEATURES_H_

#include "log.h"

struct lysp_module;
struct lys_parser_ctx;
struct lysp_qname;

/**
 * @brief Evaluate if-features array.
 *
 * @param[in] ctx libyang context.
 * @param[in] iffeatures Sized array of if-features to evaluate.
 * @param[out] enabled Whether if-features evaluated to true or false.
 * @return LY_SUCCESS on success.
 * @return LY_ERR on error.
 */
LY_ERR lys_eval_iffeatures(const struct ly_ctx *ctx, struct lysp_qname *iffeatures, ly_bool *enabled);

/**
 * @brief Enable features in a parsed module with their consolidation and checking that they really
 * can be enabled and have all their if-features true.
 *
 * @param[in] pmod Parsed module to modify.
 * @param[in] features Array of features ended with NULL to enable. NULL for all features disabled, '*' for all enabled
 * @return LY_SUCCESS on success.
 * @return LY_ERR on error.
 */
LY_ERR lys_enable_features(struct lysp_module *pmod, const char **features);

/**
 * @brief Compile if-features of features in the current module and all its submodules.
 *
 * @param[in] ctx Compile context.
 * @return LY_ERR value.
 */
LY_ERR lys_compile_feature_iffeatures(struct lysp_module *pmod);

/**
 * @brief Free all auxiliary if-feature structures in a parsed module used for compilation.
 *
 * @param[in] pmod Module to update.
 */
void lys_free_feature_iffeatures(struct lysp_module *pmod);

#endif /* LY_SCHEMA_FEATURES_H_ */
