diff options
| author | John Estabrook <jestabro@vyos.io> | 2024-09-30 14:39:51 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-30 14:39:51 -0500 |
| commit | 3a021a0964882cdd1873de6cf2bb3b4acb9043e0 (patch) | |
| tree | 4c35e21fd6d706f5dc2bec0c013293c712783c50 | |
| parent | 523c56f2840f6f7391372c01dbb22eaf8fabf95a (diff) | |
| parent | 5a393386adbd3bbf709aaf7b92441823629f91f1 (diff) | |
| download | libvyosconfig-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/changelog | 9 | ||||
| -rw-r--r-- | debian/compat | 2 | ||||
| -rw-r--r-- | lib/bindings.ml | 25 |
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 |
