blob: b033ce31b1349fc87ab2b1554b0252306855e156 [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/**
36 * @brief Enable features in a parsed module with their consolidation and checking that they really
37 * can be enabled and have all their if-features true.
38 *
39 * @param[in] pmod Parsed module to modify.
Michal Vasko08c8b272020-11-24 18:11:30 +010040 * @param[in] features Array of features ended with NULL to enable. NULL for all features disabled, '*' for all enabled.
Michal Vasko7b1ad1a2020-11-02 15:41:27 +010041 * @return LY_SUCCESS on success.
42 * @return LY_ERR on error.
43 */
44LY_ERR lys_enable_features(struct lysp_module *pmod, const char **features);
45
46/**
Michal Vasko08c8b272020-11-24 18:11:30 +010047 * @brief Set the specified features of a parsed module, with all the checks.
48 *
49 * @param[in] pmod Parsed module to modify.
Radek Krejci2415f882021-01-20 16:27:09 +010050 * @param[in] features Array of features ended with NULL to be enabled if the module is being implemented.
51 * The feature string '*' enables all and array of length 1 with only the terminating NULL explicitly disables all
52 * the features. In case the parameter is NULL, the features are untouched - left disabled in newly loaded module or
53 * with the current features settings in case the module is already present in the context.
Michal Vasko08c8b272020-11-24 18:11:30 +010054 * @return LY_SUCCESS on success.
55 * @return LY_EEXIST if the specified features were already set.
56 * @return LY_ERR on error.
57 */
58LY_ERR lys_set_features(struct lysp_module *pmod, const char **features);
59
60/**
Michal Vasko7b1ad1a2020-11-02 15:41:27 +010061 * @brief Compile if-features of features in the current module and all its submodules.
62 *
63 * @param[in] ctx Compile context.
64 * @return LY_ERR value.
65 */
66LY_ERR lys_compile_feature_iffeatures(struct lysp_module *pmod);
67
68/**
69 * @brief Free all auxiliary if-feature structures in a parsed module used for compilation.
70 *
71 * @param[in] pmod Module to update.
72 */
73void lys_free_feature_iffeatures(struct lysp_module *pmod);
74
75#endif /* LY_SCHEMA_FEATURES_H_ */