docs/src/expression_language.md
Yuck includes a small expression language that can be used to run several operations on your data. This can be used to show different values depending on certain conditions, do mathematic operations, and even access values within JSON-structures.
These expressions can be placed anywhere within your configuration inside { ... },
as well as within strings, inside string-interpolation blocks ("foo ${ ... } bar").
(box
"Some math: ${12 + foo * 10}"
(button :class {button_active ? "active" : "inactive"}
:onclick "toggle_thing"
{button_active ? "disable" : "enable"}))
Supported currently are the following features:
+, -, *, /, %)==, !=, >, <, <=, >=)||, &&, !)=~)
?:)
"" or a JSON null, then returns the right side,
otherwise evaluates to the left side.?.) or (?.[index])
null, then return null. Otherwise,
attempt to index. Note that indexing an empty JSON string ('""') is an error.Number or String).condition ? 'value' : 'other value')12, 'hi', true, some_variable)object.field, array[12], object["field"])
round(number, decimal_digits): Round a number to the given amount of decimalsfloor(number): Round a number down to the nearest integerceil(number): Round a number up to the nearest integersin(number), cos(number), tan(number), cot(number): Calculate the trigonometric value of a given number in radiansmin(a, b), max(a, b): Get the smaller or bigger number out of two given numberspowi(num, n), powf(num, n): Raise number num to power n. powi expects n to be of type i32log(num, n): Calculate the base n logarithm of num. num, n and return type are f64degtorad(number): Converts a number from degrees to radiansradtodeg(number): Converts a number from radians to degreesreplace(string, regex, replacement): Replace matches of a given regex in a stringsearch(string, regex): Search for a given regex in a string (returns array)matches(string, regex): check if a given string matches a given regex (returns bool)captures(string, regex): Get the captures of a given regex in a string (returns array)strlength(value): Gets the length of the string
substring(string, start, length): Return a substring of given length starting at the given indexarraylength(value): Gets the length of the arrayobjectlength(value): Gets the amount of entries in the objectjq(value, jq_filter_string): run a jq style command on a json value. (Uses jaq internally).jq(value, jq_filter_string, args): Emulate command line flags for jq, see the docs on invoking jq for details. Invalid flags are silently ignored.
Currently supported flags:
"r": If the result is a string, it won't be formatted as a JSON string. The equivalent jq flag is --raw-output.get_env(string): Gets the specified enviroment variableformattime(unix_timestamp, format_str, timezone): Gets the time in a given format from UNIX timestamp.
Check chrono's documentation for more
information about format string and chrono-tz's documentation
for available time zones.formattime(unix_timestamp, format_str): Gets the time in a given format from UNIX timestamp.
Same as other formattime, but does not accept timezone. Instead, it uses system's local timezone.
Check chrono's documentation for more
information about format string.formatbytes(bytes, short, format_mode): Display bytes in a human-readable format.
Arguments:
bytes: i64 of bytes, supports negative sizes.short: set true for a compact version (default: false)format_mode: set to either to "iec" (eg. 1.0 GiB) or "si" (eg. 1.2 GB) (default: "iec")