blob: 6237da08e0abe492c2097b68478eb3d2da6c1e82 [file] [log] [blame]
/**
* @file parser.h
* @author Radek Krejci <rkrejci@cesnet.cz>
* @brief Parsers for libyang
*
* Copyright (c) 2015 CESNET, z.s.p.o.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of the Company nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*/
#ifndef LY_PARSER_H_
#define LY_PARSER_H_
#include "libyang.h"
#include "tree_schema.h"
#include "tree_internal.h"
#ifndef NDEBUG
#define COUNTLINE(c) if ((c) == 0xa) {lineno++;}
#else
#define COUNTLINE(c)
#endif
/**
* @defgroup yin YIN format support
* @{
*/
struct lys_module *yin_read_module(struct ly_ctx *ctx, const char *data, int implement, struct unres_schema *unres);
struct lys_submodule *yin_read_submodule(struct lys_module *module, const char *data, int implement,
struct unres_schema *unres);
/**@} yin */
/**
* @defgroup xmldata XML data format support
* @{
*/
struct lyd_node *xml_read_data(struct ly_ctx *ctx, const char *data, int options);
/**@} xmldata */
/**
* @defgroup jsondata JSON data format support
* @{
*/
struct lyd_node *lyd_parse_json(struct ly_ctx *ctx, const struct lys_node *parent, const char *data, int options);
/**@} jsondata */
struct lys_module *lyp_search_file(struct ly_ctx *ctx, struct lys_module *module, const char *name,
const char *revision);
void lyp_set_implemented(struct lys_module *module);
struct lys_type *lyp_get_next_union_type(struct lys_type *type, struct lys_type *prev_type, int *found);
int lyp_parse_value(struct lyd_node_leaf_list *leaf, struct lyxml_elem *xml, int resolve, struct unres_data *unres, int line);
int lyp_check_length_range(const char *expr, struct lys_type *type);
int fill_yin_type(struct lys_module *module, struct lys_node *parent, struct lyxml_elem *yin, struct lys_type *type,
struct unres_schema *unres);
int check_status(uint8_t flags1, struct lys_module *mod1, const char *name1,
uint8_t flags2, struct lys_module *mod2, const char *name2, unsigned int line);
/**
* @brief Get know if the node is part of the RPC's input/output
*
* @param node Schema node to be examined.
* @return 1 for true, 0 for false
*/
int lyp_is_rpc(struct lys_node *node);
/**
* @brief Check validity of parser options.
*
* @param options Parser options to be checked.
* @retrun 0 for ok, 1 when multiple data types bits are set.
*/
int lyp_check_options(int options);
/**
* Store UTF-8 character specified as 4byte integer into the dst buffer.
* Returns number of written bytes (4 max), expects that dst has enough space.
*
* UTF-8 mapping:
* 00000000 -- 0000007F: 0xxxxxxx
* 00000080 -- 000007FF: 110xxxxx 10xxxxxx
* 00000800 -- 0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
* 00010000 -- 001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
*
*/
unsigned int pututf8(char *dst, int32_t value, uint32_t lineno);
#endif /* LY_PARSER_H_ */