blob: f12dc54df3991c9143c02a134284a4ef87b09deb [file] [log] [blame]
Michal Vasko7b1ad1a2020-11-02 15:41:27 +01001/**
2 * @file schema_features.h
3 * @author Michal Vasko <mvasko@cesnet.cz>
4 * @brief Header for schema features.
5 *
6 * Copyright (c) 2015 - 2020 CESNET, z.s.p.o.
7 *
8 * This source code is licensed under BSD 3-Clause License (the "License").
9 * You may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * https://opensource.org/licenses/BSD-3-Clause
13 */
14
15#ifndef LY_SCHEMA_FEATURES_H_
16#define LY_SCHEMA_FEATURES_H_
17
18#include "log.h"
19
Radek Krejci47fab892020-11-05 17:02:41 +010020struct ly_ctx;
Michal Vasko7b1ad1a2020-11-02 15:41:27 +010021struct lysp_module;
Michal Vasko7b1ad1a2020-11-02 15:41:27 +010022struct lysp_qname;
23
24/**
25 * @brief Evaluate if-features array.
26 *
27 * @param[in] ctx libyang context.
28 * @param[in] iffeatures Sized array of if-features to evaluate.
29 * @param[out] enabled Whether if-features evaluated to true or false.
30 * @return LY_SUCCESS on success.
31 * @return LY_ERR on error.
32 */
33LY_ERR lys_eval_iffeatures(const struct ly_ctx *ctx, struct lysp_qname *iffeatures, ly_bool *enabled);
34
35/**
Michal Vasko6a4ef772022-02-08 15:07:44 +010036 * @brief Check whether all enabled features have their if-features satisfied.
37 *
38 * @param[in] pmod Parsed module features to check.
39 * @return LY_SUCCESS on success.
40 * @return LY_EDENIED if there was an enabled feature with disabled if-feature.
41 */
42LY_ERR lys_check_features(const struct lysp_module *pmod);
43
44/**
45 * @brief Set the specified features of a parsed module ignoring their own if-features. These are all checked before
46 * compiling the module(s).
Michal Vasko08c8b272020-11-24 18:11:30 +010047 *
48 * @param[in] pmod Parsed module to modify.
Radek Krejci2415f882021-01-20 16:27:09 +010049 * @param[in] features Array of features ended with NULL to be enabled if the module is being implemented.
50 * The feature string '*' enables all and array of length 1 with only the terminating NULL explicitly disables all
51 * the features. In case the parameter is NULL, the features are untouched - left disabled in newly loaded module or
52 * with the current features settings in case the module is already present in the context.
Michal Vasko08c8b272020-11-24 18:11:30 +010053 * @return LY_SUCCESS on success.
54 * @return LY_EEXIST if the specified features were already set.
55 * @return LY_ERR on error.
56 */
57LY_ERR lys_set_features(struct lysp_module *pmod, const char **features);
58
59/**
Radek Krejci84d7fd72021-07-14 18:32:21 +020060 * @brief Compile if-features of features in the provided module and all its submodules.
Michal Vasko7b1ad1a2020-11-02 15:41:27 +010061 *
Radek Krejci84d7fd72021-07-14 18:32:21 +020062 * @param[in] pmod Parsed module to process.
Michal Vasko7b1ad1a2020-11-02 15:41:27 +010063 * @return LY_ERR value.
64 */
65LY_ERR lys_compile_feature_iffeatures(struct lysp_module *pmod);
66
Michal Vasko7b1ad1a2020-11-02 15:41:27 +010067#endif /* LY_SCHEMA_FEATURES_H_ */