blob: 134a878445362820a025e4823a8daf0aceabb873 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
{ lib, ... }:
# takes a few args and creats a valid xml tag pair out of it
#
# testTag = mkTag {
# name = "name";
# args = [
# {
# key = "arg1";
# val = "arg1val";
# }
# {
# key = "arg2";
# val = "arg2val";
# }
# ];
# value = "qwe";
# children = [
# (mkTag { name = "nested"; args = []; value = "qwe"; children = [];})
# ];
# };
#
# <name arg1=arg1val arg2=arg2val>
# value
# {children}
# </name>
{
name, # name of the tag to be used, such as `secret`, `description`, ...
args ? [ ], # args, [ { key="a"; val="b"; } { key="c"; val="d"; } ]
value ? "", # the value to place in the middle
children ? [ ], # the child elements
closing ? true, # add a closing tag
}:
let
args_str =
" " + lib.strings.concatStrings (lib.strings.intersperse " " (map (x: "${x.key}='${x.val}'") args));
child_evaled = lib.strings.concatStrings children;
cond = condition: value: if condition then value else "";
closingTag = if closing == true then "</${name}>" else "";
in
"<${name}${
lib.optionalString (args != [ ]) args_str
}${cond (closing == false) "/"}>${value}${child_evaled}${lib.optionalString (closing) closingTag}"
|