blob: 6e6ee2ef16ef2c85b4533e0b49006f9b96b09369 [file] [log] [blame]
Radek Krejcie7b95092019-05-15 11:03:07 +02001/**
2 * @file tree_data_helpers.c
3 * @author Radek Krejci <rkrejci@cesnet.cz>
4 * @brief Parsing and validation helper functions for data trees
5 *
6 * Copyright (c) 2015 - 2018 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#include "common.h"
15
16#include <assert.h>
17#include <stdlib.h>
18
19#include "log.h"
20#include "dict.h"
21#include "plugins_types.h"
22#include "tree_data.h"
23#include "tree_schema.h"
24
25struct lyd_node **
26lyd_node_children_p(struct lyd_node *node)
27{
28 assert(node);
29 switch (node->schema->nodetype) {
30 case LYS_CONTAINER:
31 case LYS_LIST:
Radek Krejci26a5dfb2019-07-26 14:51:06 +020032 case LYS_ACTION:
33 case LYS_NOTIF:
Radek Krejcie7b95092019-05-15 11:03:07 +020034 return &((struct lyd_node_inner*)node)->child;
35 default:
36 return NULL;
37 }
38}
39
40API const struct lyd_node *
41lyd_node_children(const struct lyd_node *node)
42{
43 struct lyd_node **children;
44
45 if (!node) {
46 return NULL;
47 }
48
49 children = lyd_node_children_p((struct lyd_node*)node);
50 if (children) {
51 return *children;
52 } else {
53 return NULL;
54 }
55}
Michal Vasko9b368d32020-02-14 13:53:31 +010056
57const struct lys_module *
58lyd_top_node_module(const struct lyd_node *node)
59{
60 const struct lysc_node *schema;
61
62 assert(node && !node->parent);
63
64 for (schema = node->schema; schema->parent; schema = schema->parent);
65 return schema->module;
66}