Skip to content

Commit 1102ecd

Browse files
schema: make leaf-list's default statement available
Make leaf-list's `default` statement available so that it can be accessed if end-user requires reading schema nodes. `LeafList::defaultValuesStr()` returns array of canonized string default values. Change-Id: Idc42cd877f1fd3d717d491d09c46b59492527bff
1 parent 490d8bb commit 1102ecd

File tree

5 files changed

+34
-0
lines changed

5 files changed

+34
-0
lines changed

include/libyang-cpp/SchemaNode.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ class LIBYANG_CPP_EXPORT LeafList : public SchemaNode {
169169
public:
170170
bool isMandatory() const;
171171
types::Type valueType() const;
172+
std::vector<std::string> defaultValuesStr() const;
172173
libyang::types::constraints::ListSize maxElements() const;
173174
libyang::types::constraints::ListSize minElements() const;
174175
std::optional<std::string> units() const;

src/SchemaNode.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,23 @@ types::Type LeafList::valueType() const
472472
return types::Type{reinterpret_cast<const lysc_node_leaflist*>(m_node)->type, typeParsed, m_ctx};
473473
}
474474

475+
/**
476+
* @brief Retrieves the default string values for this leaf-list.
477+
*
478+
* @return The default values, or an empty vector if the leaf-list does not have default values.
479+
*
480+
* Wraps `lysc_node_leaflist::dflts`.
481+
*/
482+
std::vector<std::string> LeafList::defaultValuesStr() const
483+
{
484+
auto dflts = reinterpret_cast<const lysc_node_leaflist*>(m_node)->dflts;
485+
std::vector<std::string> res;
486+
for (const auto& it : std::span(dflts, LY_ARRAY_COUNT(dflts))) {
487+
res.emplace_back(lyd_value_get_canonical(m_ctx.get(), it));
488+
}
489+
return res;
490+
}
491+
475492
/**
476493
* @brief Retrieves the units for this leaf.
477494
* @return The units, or std::nullopt if no units are available.

tests/context.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,7 @@ TEST_CASE("context")
733733
+--rw iid-valid? instance-identifier
734734
+--rw iid-relaxed? instance-identifier
735735
+--rw leafListBasic* string
736+
+--rw leafListWithDefault* int32
736737
+--rw leafListWithMinMaxElements* int32
737738
+--rw leafListWithUnits* int32
738739
+--rw listBasic* [primary-key]

tests/example_schema.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,14 @@ module type_module {
525525
ordered-by user;
526526
}
527527
528+
leaf-list leafListWithDefault {
529+
type int32;
530+
default -1;
531+
default +512;
532+
default 0x400;
533+
default 04000;
534+
}
535+
528536
leaf-list leafListWithMinMaxElements {
529537
type int32;
530538
min-elements 1;

tests/schema_node.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ TEST_CASE("SchemaNode")
200200
"/type_module:iid-valid",
201201
"/type_module:iid-relaxed",
202202
"/type_module:leafListBasic",
203+
"/type_module:leafListWithDefault",
203204
"/type_module:leafListWithMinMaxElements",
204205
"/type_module:leafListWithUnits",
205206
"/type_module:listBasic",
@@ -606,6 +607,12 @@ TEST_CASE("SchemaNode")
606607
REQUIRE(!ctx->findPath("/type_module:leafListBasic").asLeafList().isMandatory());
607608
}
608609

610+
DOCTEST_SUBCASE("LeafList::defaultValuesStr")
611+
{
612+
REQUIRE(ctx->findPath("/type_module:leafListWithDefault").asLeafList().defaultValuesStr() == std::vector<std::string>{"-1", "512", "1024", "2048"});
613+
REQUIRE(ctx->findPath("/type_module:leafListBasic").asLeafList().defaultValuesStr().size() == 0);
614+
}
615+
609616
DOCTEST_SUBCASE("LeafList::maxElements")
610617
{
611618
REQUIRE(ctx->findPath("/type_module:leafListWithMinMaxElements").asLeafList().maxElements() == 5);

0 commit comments

Comments
 (0)