blob: a05b6128d9bfee6e396ff812895b6f812bda5ba2 [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
18#include "printer_schema.h"
19
20typedef enum LYOUT_TYPE {
21 LYOUT_FD, /**< file descriptor */
22 LYOUT_STREAM, /**< FILE stream */
Radek Krejci4a0ed4a2019-04-18 15:08:34 +020023 LYOUT_FDSTREAM, /**< FILE stream based on duplicated file descriptor */
Radek Krejcid3ca0632019-04-16 16:54:54 +020024 LYOUT_MEMORY, /**< memory */
25 LYOUT_CALLBACK /**< print via provided callback */
26} LYOUT_TYPE;
27
28struct lyout {
29 LYOUT_TYPE type;
30 union {
31 int fd;
32 FILE *f;
33 struct {
34 char *buf;
35 size_t len;
36 size_t size;
37 } mem;
38 struct {
39 ssize_t (*f)(void *arg, const void *buf, size_t count);
40 void *arg;
41 } clb;
42 } method;
43
44 /* buffer for holes */
45 char *buffered;
46 size_t buf_len;
47 size_t buf_size;
48
49 /* hole counter */
50 size_t hole_count;
51};
52
53struct ext_substmt_info_s {
54 const char *name;
55 const char *arg;
56 int flags;
57#define SUBST_FLAG_YIN 0x1 /**< has YIN element */
58#define SUBST_FLAG_ID 0x2 /**< the value is identifier -> no quotes */
59};
60
61/* filled in printer.c */
62extern struct ext_substmt_info_s ext_substmt_info[];
63
64
65/**
66 * @brief
67 */
68LY_ERR yang_print_parsed(struct lyout *out, const struct lys_module *module);
69
70/**
71 * @brief
72 */
73LY_ERR yang_print_compiled(struct lyout *out, const struct lys_module *module);
74
75LY_ERR ly_print(struct lyout *out, const char *format, ...);
76
77void ly_print_flush(struct lyout *out);
78
79LY_ERR ly_write(struct lyout *out, const char *buf, size_t count);
80
81#endif /* LY_PRINTER_INTERNAL_H_ */