blob: d1909f8c220acf409bca93be10611d68aa8eb892 [file] [log] [blame]
Radek Krejcid3ca0632019-04-16 16:54:54 +02001/**
2 * @file printer_internal.h
3 * @author Radek Krejci <rkrejci@cesnet.cz>
4 * @brief Internal structures and functions 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_INTERNAL_H_
16#define LY_PRINTER_INTERNAL_H_
17
Michal Vaskoafac7822020-10-20 14:22:26 +020018#include "out.h"
Radek Krejcie7b95092019-05-15 11:03:07 +020019#include "printer_data.h"
Michal Vasko69730152020-10-09 16:30:07 +020020#include "printer_schema.h"
Radek Krejcid3ca0632019-04-16 16:54:54 +020021
Michal Vasko7c8439f2020-08-05 13:25:19 +020022struct lysp_module;
23struct lysp_submodule;
24
Radek Krejcie7b95092019-05-15 11:03:07 +020025/**
Radek Krejcie7b95092019-05-15 11:03:07 +020026 * @brief Informational structure for YANG statements
27 */
Radek Krejcid3ca0632019-04-16 16:54:54 +020028struct ext_substmt_info_s {
Radek Krejcie7b95092019-05-15 11:03:07 +020029 const char *name; /**< name of the statement */
30 const char *arg; /**< name of YIN's attribute to present the statement */
Radek Krejci1deb5be2020-08-26 16:43:36 +020031 uint8_t flags; /**< various flags to clarify printing of the statement */
Radek Krejcid3ca0632019-04-16 16:54:54 +020032#define SUBST_FLAG_YIN 0x1 /**< has YIN element */
33#define SUBST_FLAG_ID 0x2 /**< the value is identifier -> no quotes */
34};
35
Michal Vaskoafac7822020-10-20 14:22:26 +020036/* filled in out.c */
Radek Krejcid3ca0632019-04-16 16:54:54 +020037extern struct ext_substmt_info_s ext_substmt_info[];
38
Radek Krejcie7b95092019-05-15 11:03:07 +020039/**
Michal Vasko7c8439f2020-08-05 13:25:19 +020040 * @brief YANG printer of the parsed module. Full YANG printer.
Radek Krejcie7b95092019-05-15 11:03:07 +020041 *
42 * @param[in] out Output specification.
Michal Vasko7c8439f2020-08-05 13:25:19 +020043 * @param[in] module Main module.
44 * @param[in] modp Parsed module to print.
Radek Krejci5536d282020-08-04 23:27:44 +020045 * @param[in] options Schema output options (see @ref schemaprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +020046 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Radek Krejcid3ca0632019-04-16 16:54:54 +020047 */
Radek Krejci1deb5be2020-08-26 16:43:36 +020048LY_ERR yang_print_parsed_module(struct ly_out *out, const struct lys_module *module, const struct lysp_module *modp, uint32_t options);
Radek Krejci5536d282020-08-04 23:27:44 +020049
50/**
51 * @brief Helper macros for data printers
52 */
Radek Krejci52f65552020-09-01 17:03:35 +020053#define DO_FORMAT (!(ctx->options & LY_PRINT_SHRINK))
Radek Krejci5536d282020-08-04 23:27:44 +020054#define LEVEL ctx->level /**< current level */
55#define INDENT (DO_FORMAT ? (LEVEL)*2 : 0),"" /**< indentation parameters for printer functions */
56#define LEVEL_INC LEVEL++ /**< increase indentation level */
57#define LEVEL_DEC LEVEL-- /**< decrease indentation level */
Michal Vasko7c8439f2020-08-05 13:25:19 +020058
59/**
60 * @brief YANG printer of the parsed submodule. Full YANG printer.
61 *
62 * @param[in] out Output specification.
63 * @param[in] module Main module.
64 * @param[in] submodp Parsed submodule to print.
Radek Krejci5536d282020-08-04 23:27:44 +020065 * @param[in] options Schema output options (see @ref schemaprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +020066 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Michal Vasko7c8439f2020-08-05 13:25:19 +020067 */
Michal Vaskoafac7822020-10-20 14:22:26 +020068LY_ERR yang_print_parsed_submodule(struct ly_out *out, const struct lys_module *module,
69 const struct lysp_submodule *submodp, uint32_t options);
Radek Krejcid3ca0632019-04-16 16:54:54 +020070
71/**
Radek Krejcie7b95092019-05-15 11:03:07 +020072 * @brief YANG printer of the compiled schemas.
73 *
74 * This printer provides information about modules how they are understood by libyang.
75 * Despite the format is inspired by YANG, it is not fully compatible and should not be
76 * used as a standard YANG format.
77 *
78 * @param[in] out Output specification.
79 * @param[in] module Schema to be printed (the compiled member is used).
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080080 * @param[in] options Schema output options (see @ref schemaprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +020081 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Radek Krejcid3ca0632019-04-16 16:54:54 +020082 */
Radek Krejci1deb5be2020-08-26 16:43:36 +020083LY_ERR yang_print_compiled(struct ly_out *out, const struct lys_module *module, uint32_t options);
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080084
85/**
86 * @brief YANG printer of the compiled schema node
87 *
88 * This printer provides information about modules how they are understood by libyang.
89 * Despite the format is inspired by YANG, it is not fully compatible and should not be
90 * used as a standard YANG format.
91 *
92 * @param[in] out Output specification.
93 * @param[in] node Schema node to be printed including all its substatements.
94 * @param[in] options Schema output options (see @ref schemaprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +020095 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Radek Krejcid8c0f5e2019-11-17 12:18:34 +080096 */
Radek Krejci1deb5be2020-08-26 16:43:36 +020097LY_ERR yang_print_compiled_node(struct ly_out *out, const struct lysc_node *node, uint32_t options);
Radek Krejcid3ca0632019-04-16 16:54:54 +020098
Radek Krejcie7b95092019-05-15 11:03:07 +020099/**
Michal Vasko7c8439f2020-08-05 13:25:19 +0200100 * @brief YIN printer of the parsed module. Full YIN printer.
FredGand944bdc2019-11-05 21:57:07 +0800101 *
102 * @param[in] out Output specification.
Michal Vasko7c8439f2020-08-05 13:25:19 +0200103 * @param[in] module Main module.
104 * @param[in] modp Parsed module to print.
Radek Krejci5536d282020-08-04 23:27:44 +0200105 * @param[in] options Schema output options (see @ref schemaprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +0200106 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
FredGand944bdc2019-11-05 21:57:07 +0800107 */
Michal Vaskoafac7822020-10-20 14:22:26 +0200108LY_ERR yin_print_parsed_module(struct ly_out *out, const struct lys_module *module, const struct lysp_module *modp,
109 uint32_t options);
Michal Vasko7c8439f2020-08-05 13:25:19 +0200110
111/**
112 * @brief YIN printer of the parsed submodule. Full YIN printer.
113 *
114 * @param[in] out Output specification.
115 * @param[in] module Main module.
116 * @param[in] submodp Parsed submodule to print.
Radek Krejci5536d282020-08-04 23:27:44 +0200117 * @param[in] options Schema output options (see @ref schemaprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +0200118 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Michal Vasko7c8439f2020-08-05 13:25:19 +0200119 */
Michal Vaskoafac7822020-10-20 14:22:26 +0200120LY_ERR yin_print_parsed_submodule(struct ly_out *out, const struct lys_module *module,
121 const struct lysp_submodule *submodp, uint32_t options);
FredGand944bdc2019-11-05 21:57:07 +0800122
123/**
Michal Vasko60ea6352020-06-29 13:39:39 +0200124 * @brief XML printer of YANG data.
Radek Krejcie7b95092019-05-15 11:03:07 +0200125 *
126 * @param[in] out Output specification.
127 * @param[in] root The root element of the (sub)tree to print.
128 * @param[in] options [Data printer flags](@ref dataprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +0200129 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Radek Krejcie7b95092019-05-15 11:03:07 +0200130 */
Radek Krejci1deb5be2020-08-26 16:43:36 +0200131LY_ERR xml_print_data(struct ly_out *out, const struct lyd_node *root, uint32_t options);
Radek Krejcie7b95092019-05-15 11:03:07 +0200132
133/**
Radek Krejci5536d282020-08-04 23:27:44 +0200134 * @brief JSON printer of YANG data.
135 *
136 * @param[in] out Output specification.
137 * @param[in] root The root element of the (sub)tree to print.
138 * @param[in] options [Data printer flags](@ref dataprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +0200139 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Radek Krejci5536d282020-08-04 23:27:44 +0200140 */
Radek Krejci1deb5be2020-08-26 16:43:36 +0200141LY_ERR json_print_data(struct ly_out *out, const struct lyd_node *root, uint32_t options);
Radek Krejci5536d282020-08-04 23:27:44 +0200142
143/**
Michal Vasko60ea6352020-06-29 13:39:39 +0200144 * @brief LYB printer of YANG data.
145 *
146 * @param[in] out Output structure.
147 * @param[in] root The root element of the (sub)tree to print.
148 * @param[in] options [Data printer flags](@ref dataprinterflags).
Radek Krejci8678fa42020-08-18 16:07:28 +0200149 * @return LY_ERR value, number of the printed bytes is updated in ::ly_out.printed.
Michal Vasko60ea6352020-06-29 13:39:39 +0200150 */
Radek Krejci1deb5be2020-08-26 16:43:36 +0200151LY_ERR lyb_print_data(struct ly_out *out, const struct lyd_node *root, uint32_t options);
Michal Vasko60ea6352020-06-29 13:39:39 +0200152
Radek Krejcid3ca0632019-04-16 16:54:54 +0200153#endif /* LY_PRINTER_INTERNAL_H_ */