summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2024-09-30 14:39:51 -0500
committerGitHub <noreply@github.com>2024-09-30 14:39:51 -0500
commit3a021a0964882cdd1873de6cf2bb3b4acb9043e0 (patch)
tree4c35e21fd6d706f5dc2bec0c013293c712783c50
parent523c56f2840f6f7391372c01dbb22eaf8fabf95a (diff)
parent5a393386adbd3bbf709aaf7b92441823629f91f1 (diff)
downloadlibvyosconfig-3a021a0964882cdd1873de6cf2bb3b4acb9043e0.tar.gz
libvyosconfig-3a021a0964882cdd1873de6cf2bb3b4acb9043e0.zip
Merge pull request #18 from dmbaturin/T6742-childless-leaf-nodes-rendering
bindings: T6742: correct childless leaf nodes rendering
-rw-r--r--debian/changelog9
-rw-r--r--debian/compat2
-rw-r--r--lib/bindings.ml25
3 files changed, 35 insertions, 1 deletions
diff --git a/debian/changelog b/debian/changelog
index dc8fdba..0904f99 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+libvyosconfig0 (0.0.11) unstable; urgency=medium
+
+ * Correct rendering of nodes parsed as leaf nodes.
+ * Functions for checking if a node is leaf.
+ * A function for creating intermediate non-leaf nodes.
+ * Config diff functionality.
+
+ -- Daniil Baturin <daniil@baturin.org> Thu, 26 Sep 2024 18:54:10 +0100
+
libvyosconfig0 (0.0.10) unstable; urgency=medium
* Expose JSON rendering functions.
diff --git a/debian/compat b/debian/compat
index ec63514..f599e28 100644
--- a/debian/compat
+++ b/debian/compat
@@ -1 +1 @@
-9
+10
diff --git a/lib/bindings.ml b/lib/bindings.ml
index 4039da8..28cc525 100644
--- a/lib/bindings.ml
+++ b/lib/bindings.ml
@@ -53,6 +53,15 @@ let render_commands c_ptr op =
| _ ->
CT.render_commands ~op:CT.Set (Root.get c_ptr) []
+let create_node c_ptr path =
+ let ct = Root.get c_ptr in
+ let path = split_on_whitespace path in
+ try
+ let new_ct = CT.create_node ct path in
+ Root.set c_ptr new_ct;
+ 0 (* return 0 *)
+ with CT.Useless_set -> 1
+
let set_add_value c_ptr path value =
let ct = Root.get c_ptr in
let path = split_on_whitespace path in
@@ -118,6 +127,19 @@ let is_tag c_ptr path =
let path = split_on_whitespace path in
if (CT.is_tag ct path) then 1 else 0
+let set_leaf c_ptr path value =
+ let ct = Root.get c_ptr in
+ let path = split_on_whitespace path in
+ try
+ Root.set c_ptr (CT.set_leaf ct path value);
+ 0 (* return 0 *)
+ with _ -> 1
+
+let is_leaf c_ptr path =
+ let ct = Root.get c_ptr in
+ let path = split_on_whitespace path in
+ CT.is_leaf ct path
+
let get_subtree c_ptr path with_node =
let ct = Root.get c_ptr in
let path = split_on_whitespace path in
@@ -234,6 +256,7 @@ struct
let () = I.internal "to_json" ((ptr void) @-> returning string) render_json
let () = I.internal "to_json_ast" ((ptr void) @-> returning string) render_json_ast
let () = I.internal "to_commands" ((ptr void) @-> string @-> returning string) render_commands
+ let () = I.internal "create_node" ((ptr void) @-> string @-> returning int) create_node
let () = I.internal "set_add_value" ((ptr void) @-> string @-> string @-> returning int) set_add_value
let () = I.internal "set_replace_value" ((ptr void) @-> string @-> string @-> returning int) set_replace_value
let () = I.internal "set_valueless" ((ptr void) @-> string @-> returning int) set_valueless
@@ -243,6 +266,8 @@ struct
let () = I.internal "copy_node" ((ptr void) @-> string @-> string @-> returning int) copy_node
let () = I.internal "set_tag" ((ptr void) @-> string @-> returning int) set_tag
let () = I.internal "is_tag" ((ptr void) @-> string @-> returning int) is_tag
+ let () = I.internal "set_leaf" ((ptr void) @-> string @-> bool @-> returning int) set_leaf
+ let () = I.internal "is_leaf" ((ptr void) @-> string @-> returning bool) is_leaf
let () = I.internal "get_subtree" ((ptr void) @-> string @-> bool @-> returning (ptr void)) get_subtree
let () = I.internal "exists" ((ptr void) @-> string @-> returning int) exists
let () = I.internal "list_nodes" ((ptr void) @-> string @-> returning string) list_nodes