libyang  0.16.105
YANG data modeling language library
Libyang.hpp
Go to the documentation of this file.
1 
15 #ifndef LIBYANG_CPP_H
16 #define LIBYANG_CPP_H
17 
18 #include <iostream>
19 #include <memory>
20 #include <exception>
21 #include <functional>
22 #include <vector>
23 
24 #include "Internal.hpp"
25 
26 extern "C" {
27 #include "libyang.h"
28 }
29 
30 namespace libyang {
31 
43 class Context
44 {
45 public:
47  Context(struct ly_ctx *ctx, S_Deleter deleter);
49  explicit Context(const char *search_dir = nullptr, int options = 0);
51  Context(const char *search_dir, const char *path, LYD_FORMAT format, int options = 0);
53  Context(const char *search_dir, LYD_FORMAT format, const char *data, int options = 0);
54  ~Context();
56  int set_searchdir(const char *search_dir);
58  void unset_searchdirs(int idx) {return ly_ctx_unset_searchdirs(ctx, idx);};
60  std::vector<std::string> get_searchdirs();
78  S_Data_Node info();
80  std::vector<S_Module> get_module_iter();
82  std::vector<S_Module> get_disabled_module_iter();
84  S_Module get_module(const char *name, const char *revision = nullptr, int implemented = 0);
86  S_Module get_module_older(S_Module module);
88  S_Module load_module(const char *name, const char *revision = nullptr);
90  S_Module get_module_by_ns(const char *ns, const char *revision = nullptr, int implemented = 0);
92  S_Submodule get_submodule(const char *module, const char *revision = nullptr, const char *submodule = nullptr, const char *sub_revision = nullptr);
94  S_Submodule get_submodule2(S_Module main_module, const char *submodule = nullptr);
96  S_Schema_Node get_node(S_Schema_Node start, const char *data_path, int output = 0);
98  std::vector<S_Schema_Node> data_instantiables(int options);
100  S_Set find_path(const char *schema_path);
102  void clean();
103 
106  const char *data;
107  };
108  using mod_missing_cb_t = std::function<mod_missing_cb_return(const char *mod_name, const char *mod_rev, const char *submod_name, const char *sub_rev)>;
109  using mod_missing_deleter_t = std::function<void(void *)>;
117 
118  /* functions */
120  S_Data_Node parse_data_mem(const char *data, LYD_FORMAT format, int options = 0);
122  S_Data_Node parse_data_fd(int fd, LYD_FORMAT format, int options = 0);
124  S_Data_Node parse_data_path(const char *path, LYD_FORMAT format, int options = 0);
126  S_Data_Node parse_data_xml(S_Xml_Elem elem, int options = 0);
128  S_Module parse_module_mem(const char *data, LYS_INFORMAT format);
130  S_Module parse_module_fd(int fd, LYS_INFORMAT format);
132  S_Module parse_module_path(const char *path, LYS_INFORMAT format);
133 
134  friend std::vector<S_Error> get_ly_errors(S_Context context);
135  friend Data_Node;
136  friend Deleter;
137  friend Error;
138 
139  std::vector<std::pair<mod_missing_cb_t, mod_missing_deleter_t>> mod_missing_cb;
140  std::vector<const mod_missing_deleter_t *> mod_missing_deleter;
141  static const char* cpp_mod_missing_cb(const char *mod_name, const char *mod_rev, const char *submod_name, const char *sub_rev, void *user_data, LYS_INFORMAT *format, void(**free_module_data)(void *model_data, void *user_data));
142  static void cpp_mod_missing_deleter(void *data, void *user_data);
143 
144  /* SWIG specific */
145  struct ly_ctx *swig_ctx() {return ctx;};
146  std::vector<void*> wrap_cb_l;
147 private:
148  struct ly_ctx *ctx;
149  S_Deleter deleter;
150 };
151 
152 S_Context create_new_Context(struct ly_ctx *ctx);
153 
158 class Error
159 {
160 public:
162  Error(struct ly_err_item *eitem);
163  ~Error() {};
165  LY_ERR err() throw() {return eitem->no;};
167  LY_VECODE vecode() throw() {return eitem->vecode;};
169  const char *errmsg() const throw() {return eitem->msg ? eitem->msg : "";};
171  const char *errpath() const throw() {return eitem->path ? eitem->path : "";};
173  const char *errapptag() const throw() {return eitem->apptag ? eitem->path : "";};
174 private:
175  struct ly_err_item *eitem;
176 };
177 
178 std::vector<S_Error> get_ly_errors(S_Context context);
179 int set_log_options(int options);
181 
186 class Set
187 {
188 public:
190  Set(struct ly_set *set, S_Deleter);
191  Set();
192  ~Set();
194  unsigned int size() {return set->size;};
196  unsigned int number() {return set->number;};
198  std::vector<S_Data_Node> data();
200  std::vector<S_Schema_Node> schema();
201 
202  /* functions */
204  S_Set dup();
206  int add(S_Data_Node node, int options = 0);
208  int add(S_Schema_Node node, int options = 0);
210  int contains(S_Data_Node node);
212  int contains(S_Schema_Node node);
214  int clean();
216  int rm(S_Data_Node node);
218  int rm(S_Schema_Node node);
220  int rm_index(unsigned int index);
221 
222 private:
223  struct ly_set *set;
224  S_Deleter deleter;
225 };
226 
229 }
230 
231 #endif
std::vector< void * > wrap_cb_l
Definition: Libyang.hpp:145
LY_LOG_LEVEL set_log_verbosity(LY_LOG_LEVEL level)
Definition: Libyang.cpp:345
S_Module get_module_by_ns(const char *ns, const char *revision=nullptr, int implemented=0)
Definition: Libyang.cpp:93
Error(struct ly_err_item *eitem)
Definition: Libyang.cpp:315
std::vector< const mod_missing_deleter_t * > mod_missing_deleter
Definition: Libyang.hpp:140
const char * errmsg() const
Definition: Libyang.hpp:169
unsigned int size()
Definition: Libyang.hpp:194
LY_VECODE
libyang&#39;s codes of validation error. Whenever ly_errno is set to LY_EVALID, the ly_vecode is also set...
Definition: libyang.h:1997
LY_ERR
libyang&#39;s error codes available via ly_errno extern variable.
Definition: libyang.h:1981
void unset_disable_searchdir_cwd()
Definition: Libyang.hpp:72
struct ly_ctx * swig_ctx()
Definition: Libyang.hpp:145
S_Module load_module(const char *name, const char *revision=nullptr)
Definition: Libyang.cpp:86
S_Set find_path(const char *schema_path)
Definition: Libyang.cpp:169
std::vector< S_Module > get_disabled_module_iter()
Definition: Libyang.cpp:112
LY_VECODE vecode
Definition: libyang.h:2160
std::vector< std::pair< mod_missing_cb_t, mod_missing_deleter_t > > mod_missing_cb
Definition: Libyang.hpp:139
LY_ERR err()
Definition: Libyang.hpp:165
class for wrapping ly_err_item.
Definition: Libyang.hpp:158
S_Data_Node parse_data_xml(S_Xml_Elem elem, int options=0)
Definition: Libyang.cpp:264
void set_disable_searchdir_cwd()
Definition: Libyang.hpp:70
class for wrapping ly_ctx.
Definition: Libyang.hpp:43
void ly_ctx_unset_prefer_searchdirs(struct ly_ctx *ctx)
Reverse function to ly_ctx_set_prefer_searchdirs().
S_Data_Node parse_data_path(const char *path, LYD_FORMAT format, int options=0)
Definition: Libyang.cpp:252
static void cpp_mod_missing_deleter(void *data, void *user_data)
Definition: Libyang.cpp:307
S_Data_Node parse_data_fd(int fd, LYD_FORMAT format, int options=0)
Definition: Libyang.cpp:203
S_Module parse_module_path(const char *path, LYS_INFORMAT format)
Definition: Libyang.cpp:240
LY_LOG_LEVEL level
Definition: libyang.h:2158
S_Submodule get_submodule2(S_Module main_module, const char *submodule=nullptr)
Definition: Libyang.cpp:155
const char * errpath() const
Definition: Libyang.hpp:171
void unset_prefer_searchdirs()
Definition: Libyang.hpp:76
int clean()
Definition: Libyang.cpp:405
The main libyang public header.
friend std::vector< S_Error > get_ly_errors(S_Context context)
Definition: Libyang.cpp:319
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
Definition: tree_data.h:40
void add_missing_module_callback(const mod_missing_cb_t &callback, const mod_missing_deleter_t &deleter=mod_missing_deleter_t())
Add a missing include or import module callback.
Definition: Libyang.cpp:277
S_Data_Node parse_data_mem(const char *data, LYD_FORMAT format, int options=0)
Definition: Libyang.cpp:191
char * apptag
Definition: libyang.h:2163
char * path
Definition: libyang.h:2162
Structure to hold a set of (not necessary somehow connected) lyd_node or lys_node objects...
Definition: libyang.h:1716
std::vector< std::string > get_searchdirs()
Definition: Libyang.cpp:130
LY_VECODE vecode()
Definition: Libyang.hpp:167
S_Module get_module(const char *name, const char *revision=nullptr, int implemented=0)
Definition: Libyang.cpp:78
Libyang full error structure.
Definition: libyang.h:2157
std::function< mod_missing_cb_return(const char *mod_name, const char *mod_rev, const char *submod_name, const char *sub_rev)> mod_missing_cb_t
Definition: Libyang.hpp:108
int add(S_Data_Node node, int options=0)
Definition: Libyang.cpp:393
void ly_ctx_unset_allimplemented(struct ly_ctx *ctx)
Reverse function to ly_ctx_set_allimplemented().
friend Data_Node
Definition: Libyang.hpp:135
std::vector< S_Schema_Node > schema()
Definition: Libyang.cpp:374
std::vector< S_Error > get_ly_errors(S_Context context)
Definition: Libyang.cpp:319
void set_prefer_searchdirs()
Definition: Libyang.hpp:74
int contains(S_Data_Node node)
Definition: Libyang.cpp:399
LY_ERR no
Definition: libyang.h:2159
void ly_ctx_unset_disable_searchdir_cwd(struct ly_ctx *ctx)
Reverse function to ly_ctx_set_disable_searchdir_cwd().
const char * errapptag() const
Definition: Libyang.hpp:173
LYS_INFORMAT
Schema input formats accepted by libyang parser functions.
Definition: tree_schema.h:195
std::function< void(void *)> mod_missing_deleter_t
Definition: Libyang.hpp:109
void unset_allimplemented()
Definition: Libyang.hpp:64
void ly_ctx_set_disable_searchdir_cwd(struct ly_ctx *ctx)
Make context to stop implicitly searching for schemas (imported, included or requested via ly_ctx_loa...
int set_log_options(int options)
Definition: Libyang.cpp:340
std::vector< S_Schema_Node > data_instantiables(int options)
Definition: Libyang.cpp:178
Context(struct ly_ctx *ctx, S_Deleter deleter)
Definition: Libyang.cpp:35
void set_disable_searchdirs()
Definition: Libyang.hpp:66
unsigned int number()
Definition: Libyang.hpp:196
void unset_searchdirs(int idx)
Definition: Libyang.hpp:58
S_Module get_module_older(S_Module module)
Definition: Libyang.cpp:82
LY_LOG_LEVEL
Verbosity levels of the libyang logger.
Definition: libyang.h:1880
char * msg
Definition: libyang.h:2161
void unset_disable_searchdirs()
Definition: Libyang.hpp:68
void ly_ctx_unset_searchdirs(struct ly_ctx *ctx, int index)
Clean the search path(s) from the libyang context.
S_Module parse_module_mem(const char *data, LYS_INFORMAT format)
Definition: Libyang.cpp:216
std::vector< S_Data_Node > data()
Definition: Libyang.cpp:364
S_Module parse_module_fd(int fd, LYS_INFORMAT format)
Definition: Libyang.cpp:228
std::vector< S_Module > get_module_iter()
Definition: Libyang.cpp:97
int rm(S_Data_Node node)
Definition: Libyang.cpp:408
S_Set dup()
Definition: Libyang.cpp:384
class for wrapping ly_set.
Definition: Libyang.hpp:186
int set_searchdir(const char *search_dir)
Definition: Libyang.cpp:61
S_Schema_Node get_node(S_Schema_Node start, const char *data_path, int output=0)
Definition: Libyang.cpp:162
S_Data_Node info()
Definition: Libyang.cpp:68
S_Submodule get_submodule(const char *module, const char *revision=nullptr, const char *submodule=nullptr, const char *sub_revision=nullptr)
Definition: Libyang.cpp:148
void ly_ctx_set_allimplemented(struct ly_ctx *ctx)
Make context to set all the imported modules to be implemented. By default, if the imported module is...
void set_allimplemented()
Definition: Libyang.hpp:62
S_Context create_new_Context(struct ly_ctx *ctx)
Definition: Libyang.cpp:419
void ly_ctx_set_disable_searchdirs(struct ly_ctx *ctx)
Make context to stop searching for schemas (imported, included or requested via ly_ctx_load_module())...
void ly_ctx_set_prefer_searchdirs(struct ly_ctx *ctx)
Prefer context&#39;s searchdirs before the user callback (ly_module_imp_clb) provided via ly_ctx_set_modu...
int rm_index(unsigned int index)
Definition: Libyang.cpp:414
libyang context handler.
static const char * cpp_mod_missing_cb(const char *mod_name, const char *mod_rev, const char *submod_name, const char *sub_rev, void *user_data, LYS_INFORMAT *format, void(**free_module_data)(void *model_data, void *user_data))
Definition: Libyang.cpp:285
void ly_ctx_unset_disable_searchdirs(struct ly_ctx *ctx)
Reverse function to ly_ctx_set_disable_searchdirs().