Skip to content

Commit

Permalink
lib.yang.path: add unparse_path
Browse files Browse the repository at this point in the history
  • Loading branch information
eugeneia committed Nov 3, 2022
1 parent 275da2a commit 97a5899
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/lib/yang/path.lua
Expand Up @@ -10,6 +10,7 @@ module(..., package.seeall)
local valuelib = require("lib.yang.value")
local datalib = require("lib.yang.data")
local normalize_id = datalib.normalize_id
local lib = require("core.lib")


local function syntax_error(str, pos)
Expand Down Expand Up @@ -177,6 +178,44 @@ function parse_path(path, grammar)
return path
end

local function unparse_query(grammar, key)
if grammar.type == 'array' then
return {['position()']=tonumber(key)}
elseif grammar.type == 'list' then
if not grammar.list.has_key then
error("Invalid key: list has no key.")
end
local query = {}
for k,grammar in pairs(grammar.keys) do
local key_primitive_type = grammar.argument_type.primitive_type
local tostring = valuelib.types[key_primitive_type].tostring
local id = normalize_id(k)
if key[id] then
query[k] = tostring(key[id])
elseif grammar.default then
query[k] = grammar.default
else
error("Invalid key: missing required key '"..k.."'")
end
end
return query
else
error("Invalid key: can only query list or leaf-list.")
end
end

function unparse_path(path, grammar)
path = lib.deepcopy(path)
for _, part in ipairs(path) do
grammar = extract_grammar_node(grammar, part.name)
part.grammar = grammar
if part.key then
part.query = unparse_query(grammar, part.key)
end
end
return path
end

function normalize_path(path, grammar)
path = parse_path(path, grammar)
local ret = {}
Expand Down

0 comments on commit 97a5899

Please sign in to comment.