/** * @file printer.h * @author Radek Krejci * @brief Printers for libyang * * Copyright (c) 2015 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_PRINTER_H_ #define LY_PRINTER_H_ #include "libyang.h" #include "tree_schema.h" #include "tree_internal.h" typedef enum LYOUT_TYPE { LYOUT_FD, /**< file descriptor */ LYOUT_STREAM, /**< FILE stream */ LYOUT_MEMORY, /**< memory */ LYOUT_CALLBACK /**< print via provided callback */ } LYOUT_TYPE; struct lyout { LYOUT_TYPE type; union { int fd; FILE *f; struct { char *buf; size_t len; size_t size; } mem; struct { ssize_t (*f)(void *arg, const void *buf, size_t count); void *arg; } clb; } method; /* buffer for holes */ char *buffered; size_t buf_len; size_t buf_size; /* hole counter */ size_t hole_count; }; struct ext_substmt_info_s { const char *name; const char *arg; int flags; #define SUBST_FLAG_YIN 0x1 /**< has YIN element */ #define SUBST_FLAG_ID 0x2 /**< the value is identifier -> no quotes */ }; #define LY_PRINT_SET errno = 0 #define LY_PRINT_RET(ctx) if (errno) { LOGERR(ctx, LY_ESYS, "Print error (%s).", strerror(errno)); return EXIT_FAILURE; } else \ { return EXIT_SUCCESS; } /* filled in printer.c */ extern struct ext_substmt_info_s ext_substmt_info[]; /** * @brief Generic printer, replacement for printf() / write() / etc */ int ly_print(struct lyout *out, const char *format, ...); void ly_print_flush(struct lyout *out); int ly_write(struct lyout *out, const char *buf, size_t count); int ly_write_skip(struct lyout *out, size_t count, size_t *position); int ly_write_skipped(struct lyout *out, size_t position, const char *buf, size_t count); /* prefix_kind: 0 - print import prefixes for foreign features, 1 - print module names, 2 - print prefixes (tree printer), 3 - print module names including revisions (JSONS printer) */ int ly_print_iffeature(struct lyout *out, const struct lys_module *module, struct lys_iffeature *expr, int prefix_kind); int yang_print_model(struct lyout *out, const struct lys_module *module); int yin_print_model(struct lyout *out, const struct lys_module *module); int tree_print_model(struct lyout *out, const struct lys_module *module, const char *target_schema_path, int line_length, int options); int info_print_model(struct lyout *out, const struct lys_module *module, const char *target_schema_path); int jsons_print_model(struct lyout *out, const struct lys_module *module, const char *target_schema_path); int json_print_data(struct lyout *out, const struct lyd_node *root, int options); int xml_print_data(struct lyout *out, const struct lyd_node *root, int options); int xml_print_node(struct lyout *out, int level, const struct lyd_node *node, int toplevel, int options); int lyb_print_data(struct lyout *out, const struct lyd_node *root, int options); int lys_print_target(struct lyout *out, const struct lys_module *module, const char *target_schema_path, void (*clb_print_typedef)(struct lyout*, const struct lys_tpdf*, int*), void (*clb_print_identity)(struct lyout*, const struct lys_ident*, int*), void (*clb_print_feature)(struct lyout*, const struct lys_feature*, int*), void (*clb_print_type)(struct lyout*, const struct lys_type*, int*), void (*clb_print_grouping)(struct lyout*, const struct lys_node*, int*), void (*clb_print_container)(struct lyout*, const struct lys_node*, int*), void (*clb_print_choice)(struct lyout*, const struct lys_node*, int*), void (*clb_print_leaf)(struct lyout*, const struct lys_node*, int*), void (*clb_print_leaflist)(struct lyout*, const struct lys_node*, int*), void (*clb_print_list)(struct lyout*, const struct lys_node*, int*), void (*clb_print_anydata)(struct lyout*, const struct lys_node*, int*), void (*clb_print_case)(struct lyout*, const struct lys_node*, int*), void (*clb_print_notif)(struct lyout*, const struct lys_node*, int*), void (*clb_print_rpc)(struct lyout*, const struct lys_node*, int*), void (*clb_print_action)(struct lyout*, const struct lys_node*, int*), void (*clb_print_input)(struct lyout*, const struct lys_node*, int*), void (*clb_print_output)(struct lyout*, const struct lys_node*, int*)); /* 0 - same, 1 - different */ int nscmp(const struct lyd_node *node1, const struct lyd_node *node2); #endif /* LY_PRINTER_H_ */