Native Functions
Tanka extends Jsonnet using native functions, offering additional functionality not yet available in the standard library.
To use them in your code, you need to access them using std.native
from the standard library:
{ someField: std.native('<name>')(<arguments>),}
std.native
takes the native function’s name as a string
argument and returns a function
, which is called using the second set of parentheses.
sha256
Signature
sha256(string str) string
sha256
computes the SHA256 sum of the given string.
Examples
{ sum: std.native('sha256')('Hello, World!'),}
Evaluating with Tanka results in the JSON:
{ "sum": "dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f"}
parseJson
Signature
parseJson(string json) Object
parseJson
parses a json string and returns the respective Jsonnet type (Object
, Array
, etc).
Examples
{ array: std.native('parseJson')('[0, 1, 2]'), object: std.native('parseJson')('{ "foo": "bar" }'),}
Evaluating with Tanka results in the JSON:
{ "array": [0, 1, 2], "object": { "foo": "bar" }}
parseYaml
Signature
parseYaml(string yaml) []Object
parseYaml
wraps yaml.Unmarshal
to convert a string of yaml document(s) into
a set of dicts. If yaml
only contains a single document, a single value array
will be returned.
Examples
{ yaml: std.native('parseYaml')(||| --- foo: bar --- bar: baz |||),}
Evaluating with Tanka results in the JSON:
{ "yaml": [ { "foo": "bar" }, { "bar": "baz" } ]}
manifestJsonFromJson
Signature
manifestJsonFromJson(string json, int indent) string
manifestJsonFromJson
reserializes JSON and allows to change the indentation.
Examples
{ indentWithEightSpaces: std.native('manifestJsonFromJson')('{ "foo": { "bar": "baz" } }', 8),}
Evaluating with Tanka results in the JSON:
{ "indentWithEightSpaces": "{\n \"foo\": {\n \"bar\": \"baz\"\n }\n}\n"}
manifestYamlFromJson
Signature
manifestYamlFromJson(string json) string
manifestYamlFromJson
serializes a JSON string as a YAML document.
Examples
{ yaml: std.native('manifestYamlFromJson')('{ "foo": { "bar": "baz" } }'),}
Evaluating with Tanka results in the JSON:
{ "yaml": "foo:\n bar: baz\n"}
escapeStringRegex
Signature
escapeStringRegex(string s) string
escapeStringRegex
escapes all regular expression metacharacters and returns a
regular expression that matches the literal text.
Examples
{ escaped: std.native('escapeStringRegex')('"([0-9]+"'),}
Evaluating with Tanka results in the JSON:
{ "escaped": "\"\\(\\[0-9\\]\\+\""}
regexMatch
Signature
regexMatch(string regex, string s) boolean
regexMatch
returns whether the given string is matched by the given
RE2 regular expression.
Examples
{ matched: std.native('regexMatch')('.', 'a'),}
Evaluating with Tanka results in the JSON:
{ "matched": true}
regexSubst
Signature
regexSubst(string regex, string src, string repl) string
regexSubst
replaces all matches of the re2 regular expression with the
replacement string.
Examples
{ substituted: std.native('regexSubst')('p[^m]*', 'pm', 'poe'),}
Evaluating with Tanka results in the JSON:
{ "substituted": "poem"}