blob: 3e5dc41edbe335d281cc257a85ebe7be6a4963a7 [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
18#include <unistd.h>
19
Radek Krejcie7b95092019-05-15 11:03:07 +020020#include "tree_schema.h"
21
Radek Krejci535ea9f2020-05-29 16:01:05 +020022struct ly_out;
23
Radek Krejci2ff0d572020-05-21 15:27:28 +020024/**
25 * @addtogroup schematree
26 * @{
27 */
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080028
29/**
30 * @defgroup schemaprinterflags Schema output options
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080031 * @{
32 */
Radek Krejci4fa6ebf2019-11-21 13:34:35 +080033#define LYS_OUTPUT_NO_SUBSTMT 0x10 /**< Print only top-level/referede node information,
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080034 do not print information from the substatements */
35//#define LYS_OUTOPT_TREE_RFC 0x01 /**< Conform to the RFC TODO tree output (only for tree format) */
36//#define LYS_OUTOPT_TREE_GROUPING 0x02 /**< Print groupings separately (only for tree format) */
37//#define LYS_OUTOPT_TREE_USES 0x04 /**< Print only uses instead the resolved grouping nodes (only for tree format) */
38//#define LYS_OUTOPT_TREE_NO_LEAFREF 0x08 /**< Do not print the target of leafrefs (only for tree format) */
39
Radek Krejci2ff0d572020-05-21 15:27:28 +020040/** @} schemaprinterflags */
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080041
Radek Krejcid3ca0632019-04-16 16:54:54 +020042/**
Radek Krejcif0e1ba52020-05-22 15:14:35 +020043 * @brief Schema output formats accepted by libyang [printer functions](@ref howtoschemasprinters).
44 */
45typedef enum {
46 LYS_OUT_UNKNOWN = 0, /**< unknown format, used as return value in case of error */
47 LYS_OUT_YANG = 1, /**< YANG schema output format */
48 LYS_OUT_YANG_COMPILED = 2, /**< YANG schema output format of the compiled schema tree */
49 LYS_OUT_YIN = 3, /**< YIN schema output format */
50
51 LYS_OUT_TREE, /**< Tree schema output format, for more information see the [printers](@ref howtoschemasprinters) page */
52} LYS_OUTFORMAT;
53
54/**
Radek Krejcia5bba312020-01-09 15:41:20 +010055 * @brief Schema module printer.
Radek Krejcid3ca0632019-04-16 16:54:54 +020056 *
Radek Krejci241f6b52020-05-21 18:13:49 +020057 * @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 +010058 * @param[in] module Schema to print.
59 * @param[in] format Output format.
Radek Krejcid3ca0632019-04-16 16:54:54 +020060 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
61 * @param[in] options Schema output options (see @ref schemaprinterflags).
Radek Krejci897ad2e2019-04-29 16:43:07 +020062 * @return Number of printed bytes in case of success.
63 * @return Negative value failure (absolute value corresponds to LY_ERR values).
Radek Krejcid3ca0632019-04-16 16:54:54 +020064 */
Radek Krejci241f6b52020-05-21 18:13:49 +020065ssize_t lys_print(struct ly_out *out, const struct lys_module *module, LYS_OUTFORMAT format, int line_length, int options);
Radek Krejcid3ca0632019-04-16 16:54:54 +020066
67/**
Radek Krejci26da5222020-06-09 17:43:17 +020068 * @brief Print schema tree in the specified format into a memory block.
69 * It is up to caller to free the returned string by free().
70 *
71 * This is just a wrapper around lys_print() for simple use cases.
72 * In case of a complex use cases, use lys_print with ly_out output handler.
73 *
74 * @param[out] strp Pointer to store the resulting dump.
75 * @param[in] module Schema tree to print.
76 * @param[in] format Schema output format.
77 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
78 * @param[in] options Schema output options (see @ref schemaprinterflags).
79 * @return LY_ERR value.
80 */
81LY_ERR lys_print_mem(char **strp, const struct lys_module *module, LYS_OUTFORMAT format, int line_length, int options);
82
83/**
84 * @brief Print schema tree in the specified format into a file descriptor.
85 *
86 * This is just a wrapper around lys_print() for simple use cases.
87 * In case of a complex use cases, use lys_print with ly_out output handler.
88 *
89 * @param[in] fd File descriptor where to print the data.
90 * @param[in] module Schema tree to print.
91 * @param[in] format Schema output format.
92 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE format.
93 * @param[in] options Schema output options (see @ref schemaprinterflags).
94 * @return LY_ERR value.
95 */
96LY_ERR lys_print_fd(int fd, const struct lys_module *module, LYS_OUTFORMAT format, int line_length, int options);
97
98/**
99 * @brief Print schema tree in the specified format into a file stream.
100 *
101 * This is just a wrapper around lys_print() for simple use cases.
102 * In case of a complex use cases, use lys_print with ly_out output handler.
103 *
104 * @param[in] module Schema tree to print.
105 * @param[in] f File stream where to print the schema.
106 * @param[in] format Schema output format.
107 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
108 * @param[in] options Schema output options (see @ref schemaprinterflags).
109 * @return LY_ERR value.
110 */
111LY_ERR lys_print_file(FILE *f, const struct lys_module *module, LYS_OUTFORMAT format, int line_length, int options);
112
113/**
114 * @brief Print schema tree in the specified format into a file.
115 *
116 * This is just a wrapper around lys_print() for simple use cases.
117 * In case of a complex use cases, use lys_print with ly_out output handler.
118 *
119 * @param[in] path File where to print the schema.
120 * @param[in] module Schema tree to print.
121 * @param[in] format Schema output format.
122 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
123 * @param[in] options Schema output options (see @ref schemaprinterflags).
124 * @return LY_ERR value.
125 */
126LY_ERR lys_print_path(const char *path, const struct lys_module *module, LYS_OUTFORMAT format, int line_length, int options);
127
128/**
129 * @brief Print schema tree in the specified format using a provided callback.
130 *
131 * This is just a wrapper around lys_print() for simple use cases.
132 * In case of a complex use cases, use lys_print with ly_out output handler.
133 *
134 * @param[in] module Schema tree to print.
135 * @param[in] writeclb Callback function to write the data (see write(1)).
136 * @param[in] arg Optional caller-specific argument to be passed to the \p writeclb callback.
137 * @param[in] format Schema output format.
138 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
139 * @param[in] options Schema output options (see @ref schemaprinterflags).
140 * @return LY_ERR value.
141 */
142LY_ERR lys_print_clb(ssize_t (*writeclb)(void *arg, const void *buf, size_t count), void *arg,
143 const struct lys_module *module, LYS_OUTFORMAT format, int line_length, int options);
144
145/**
Radek Krejcia5bba312020-01-09 15:41:20 +0100146 * @brief Schema node printer.
Radek Krejcid8c0f5e2019-11-17 12:18:34 +0800147 *
Radek Krejci241f6b52020-05-21 18:13:49 +0200148 * @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 +0100149 * @param[in] node Schema node to print, lys_find_node() can be used to get it from a path string.
150 * @param[in] format Output format.
Radek Krejcid8c0f5e2019-11-17 12:18:34 +0800151 * @param[in] line_length Maximum characters to be printed on a line, 0 for unlimited. Only for #LYS_OUT_TREE printer.
152 * @param[in] options Schema output options (see @ref schemaprinterflags).
153 * @return Number of printed bytes in case of success.
154 * @return Negative value failure (absolute value corresponds to LY_ERR values).
155 */
Radek Krejci241f6b52020-05-21 18:13:49 +0200156ssize_t 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 +0800157
Radek Krejci2ff0d572020-05-21 15:27:28 +0200158/** @} schematree */
159
Radek Krejcid3ca0632019-04-16 16:54:54 +0200160#endif /* LY_PRINTER_SCHEMA_H_ */