blob: da7324896dbf209eebfabad254adfbbb15a46f98 [file] [log] [blame]
Radek Krejcid3ca0632019-04-16 16:54:54 +02001/**
2 * @file printer_schema.h
3 * @author Radek Krejci <rkrejci@cesnet.cz>
4 * @brief Schema printers for libyang
5 *
6 * Copyright (c) 2015-2019 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_PRINTER_SCHEMA_H_
16#define LY_PRINTER_SCHEMA_H_
17
Radek Krejcica376bd2020-06-11 16:04:06 +020018#include <stdio.h>
Radek Krejcid3ca0632019-04-16 16:54:54 +020019#include <unistd.h>
20
Radek Krejcica376bd2020-06-11 16:04:06 +020021#include "log.h"
22
23#ifdef __cplusplus
24extern "C" {
25#endif
Radek Krejcie7b95092019-05-15 11:03:07 +020026
Radek Krejci535ea9f2020-05-29 16:01:05 +020027struct ly_out;
Radek Krejcica376bd2020-06-11 16:04:06 +020028struct lys_module;
29struct lysc_node;
Michal Vasko7c8439f2020-08-05 13:25:19 +020030struct lysp_submodule;
Radek Krejci535ea9f2020-05-29 16:01:05 +020031
Radek Krejci2ff0d572020-05-21 15:27:28 +020032/**
33 * @addtogroup schematree
34 * @{
35 */
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080036
37/**
38 * @defgroup schemaprinterflags Schema output options
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080039 * @{
40 */
Radek Krejci5536d282020-08-04 23:27:44 +020041/* Keep the value 0x02 reserver for implicit LYS_PRINT_FORMAT */
Radek Krejci4fa6ebf2019-11-21 13:34:35 +080042#define LYS_OUTPUT_NO_SUBSTMT 0x10 /**< Print only top-level/referede node information,
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080043 do not print information from the substatements */
44//#define LYS_OUTOPT_TREE_RFC 0x01 /**< Conform to the RFC TODO tree output (only for tree format) */
45//#define LYS_OUTOPT_TREE_GROUPING 0x02 /**< Print groupings separately (only for tree format) */
46//#define LYS_OUTOPT_TREE_USES 0x04 /**< Print only uses instead the resolved grouping nodes (only for tree format) */
47//#define LYS_OUTOPT_TREE_NO_LEAFREF 0x08 /**< Do not print the target of leafrefs (only for tree format) */
48
Radek Krejci2ff0d572020-05-21 15:27:28 +020049/** @} schemaprinterflags */
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080050
Radek Krejcid3ca0632019-04-16 16:54:54 +020051/**
Radek Krejcif0e1ba52020-05-22 15:14:35 +020052 * @brief Schema output formats accepted by libyang [printer functions](@ref howtoschemasprinters).
53 */
54typedef enum {
55 LYS_OUT_UNKNOWN = 0, /**< unknown format, used as return value in case of error */
56 LYS_OUT_YANG = 1, /**< YANG schema output format */
57 LYS_OUT_YANG_COMPILED = 2, /**< YANG schema output format of the compiled schema tree */
58 LYS_OUT_YIN = 3, /**< YIN schema output format */
59
60 LYS_OUT_TREE, /**< Tree schema output format, for more information see the [printers](@ref howtoschemasprinters) page */
61} LYS_OUTFORMAT;
62
63/**
Radek Krejcia5bba312020-01-09 15:41:20 +010064 * @brief Schema module printer.
Radek Krejcid3ca0632019-04-16 16:54:54 +020065 *
Radek Krejci241f6b52020-05-21 18:13:49 +020066 * @param[in] out Printer handler for a specific output. Use ly_out_*() functions to create and free the handler.
Michal Vasko7c8439f2020-08-05 13:25:19 +020067 * @param[in] module Main module with the parsed schema to print.
Radek Krejcia5bba312020-01-09 15:41:20 +010068 * @param[in] format Output format.
Radek Krejcid3ca0632019-04-16 16:54:54 +020069 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
70 * @param[in] options Schema output options (see @ref schemaprinterflags).
Michal Vasko63f3d842020-07-08 10:10:14 +020071 * @return LY_ERR value.
Radek Krejcid3ca0632019-04-16 16:54:54 +020072 */
Michal Vasko7c8439f2020-08-05 13:25:19 +020073LY_ERR lys_print_module(struct ly_out *out, const struct lys_module *module, LYS_OUTFORMAT format, int line_length, int options);
74
75/**
76 * @brief Schema submodule printer.
77 *
78 * @param[in] out Printer handler for a specific output. Use ly_out_*() functions to create and free the handler.
79 * @param[in] module Main module of the submodule to print.
80 * @param[in] submodule Parsed submodule to print.
81 * @param[in] format Output format.
82 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
83 * @param[in] options Schema output options (see @ref schemaprinterflags).
84 * @return LY_ERR value.
85 */
86LY_ERR lys_print_submodule(struct ly_out *out, const struct lys_module *module, const struct lysp_submodule *submodule,
87 LYS_OUTFORMAT format, int line_length, int options);
Radek Krejcid3ca0632019-04-16 16:54:54 +020088
89/**
Radek Krejci26da5222020-06-09 17:43:17 +020090 * @brief Print schema tree in the specified format into a memory block.
91 * It is up to caller to free the returned string by free().
92 *
93 * This is just a wrapper around lys_print() for simple use cases.
94 * In case of a complex use cases, use lys_print with ly_out output handler.
95 *
96 * @param[out] strp Pointer to store the resulting dump.
97 * @param[in] module Schema tree to print.
98 * @param[in] format Schema output format.
Radek Krejci26da5222020-06-09 17:43:17 +020099 * @param[in] options Schema output options (see @ref schemaprinterflags).
100 * @return LY_ERR value.
101 */
Michal Vasko7c8439f2020-08-05 13:25:19 +0200102LY_ERR lys_print_mem(char **strp, const struct lys_module *module, LYS_OUTFORMAT format, int options);
Radek Krejci26da5222020-06-09 17:43:17 +0200103
104/**
105 * @brief Print schema tree in the specified format into a file descriptor.
106 *
107 * This is just a wrapper around lys_print() for simple use cases.
108 * In case of a complex use cases, use lys_print with ly_out output handler.
109 *
110 * @param[in] fd File descriptor where to print the data.
111 * @param[in] module Schema tree to print.
112 * @param[in] format Schema output format.
Radek Krejci26da5222020-06-09 17:43:17 +0200113 * @param[in] options Schema output options (see @ref schemaprinterflags).
114 * @return LY_ERR value.
115 */
Michal Vasko7c8439f2020-08-05 13:25:19 +0200116LY_ERR lys_print_fd(int fd, const struct lys_module *module, LYS_OUTFORMAT format, int options);
Radek Krejci26da5222020-06-09 17:43:17 +0200117
118/**
119 * @brief Print schema tree in the specified format into a file stream.
120 *
121 * This is just a wrapper around lys_print() for simple use cases.
122 * In case of a complex use cases, use lys_print with ly_out output handler.
123 *
124 * @param[in] module Schema tree to print.
125 * @param[in] f File stream where to print the schema.
126 * @param[in] format Schema output format.
Radek Krejci26da5222020-06-09 17:43:17 +0200127 * @param[in] options Schema output options (see @ref schemaprinterflags).
128 * @return LY_ERR value.
129 */
Michal Vasko7c8439f2020-08-05 13:25:19 +0200130LY_ERR lys_print_file(FILE *f, const struct lys_module *module, LYS_OUTFORMAT format, int options);
Radek Krejci26da5222020-06-09 17:43:17 +0200131
132/**
133 * @brief Print schema tree in the specified format into a file.
134 *
135 * This is just a wrapper around lys_print() for simple use cases.
136 * In case of a complex use cases, use lys_print with ly_out output handler.
137 *
138 * @param[in] path File where to print the schema.
139 * @param[in] module Schema tree to print.
140 * @param[in] format Schema output format.
Radek Krejci26da5222020-06-09 17:43:17 +0200141 * @param[in] options Schema output options (see @ref schemaprinterflags).
142 * @return LY_ERR value.
143 */
Michal Vasko7c8439f2020-08-05 13:25:19 +0200144LY_ERR lys_print_path(const char *path, const struct lys_module *module, LYS_OUTFORMAT format, int options);
Radek Krejci26da5222020-06-09 17:43:17 +0200145
146/**
147 * @brief Print schema tree in the specified format using a provided callback.
148 *
149 * This is just a wrapper around lys_print() for simple use cases.
150 * In case of a complex use cases, use lys_print with ly_out output handler.
151 *
152 * @param[in] module Schema tree to print.
153 * @param[in] writeclb Callback function to write the data (see write(1)).
154 * @param[in] arg Optional caller-specific argument to be passed to the \p writeclb callback.
155 * @param[in] format Schema output format.
Radek Krejci26da5222020-06-09 17:43:17 +0200156 * @param[in] options Schema output options (see @ref schemaprinterflags).
157 * @return LY_ERR value.
158 */
159LY_ERR lys_print_clb(ssize_t (*writeclb)(void *arg, const void *buf, size_t count), void *arg,
Michal Vasko7c8439f2020-08-05 13:25:19 +0200160 const struct lys_module *module, LYS_OUTFORMAT format, int options);
Radek Krejci26da5222020-06-09 17:43:17 +0200161
162/**
Radek Krejcia5bba312020-01-09 15:41:20 +0100163 * @brief Schema node printer.
Radek Krejcid8c0f5e2019-11-17 12:18:34 +0800164 *
Radek Krejci241f6b52020-05-21 18:13:49 +0200165 * @param[in] out Printer handler for a specific output. Use ly_out_*() functions to create and free the handler.
Radek Krejcia5bba312020-01-09 15:41:20 +0100166 * @param[in] node Schema node to print, lys_find_node() can be used to get it from a path string.
167 * @param[in] format Output format.
Radek Krejcid8c0f5e2019-11-17 12:18:34 +0800168 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
169 * @param[in] options Schema output options (see @ref schemaprinterflags).
Michal Vasko63f3d842020-07-08 10:10:14 +0200170 * @return LY_ERR value.
Radek Krejcid8c0f5e2019-11-17 12:18:34 +0800171 */
Michal Vasko63f3d842020-07-08 10:10:14 +0200172LY_ERR lys_print_node(struct ly_out *out, const struct lysc_node *node, LYS_OUTFORMAT format, int line_length, int options);
Radek Krejcid8c0f5e2019-11-17 12:18:34 +0800173
Radek Krejci2ff0d572020-05-21 15:27:28 +0200174/** @} schematree */
175
Radek Krejcica376bd2020-06-11 16:04:06 +0200176#ifdef __cplusplus
177}
178#endif
179
Radek Krejcid3ca0632019-04-16 16:54:54 +0200180#endif /* LY_PRINTER_SCHEMA_H_ */