#format #dsl #rhai #script #data #scripting

bin+lib script-format

A simple DSL to format data via rhai scripting

14 releases (6 stable)

new 1.3.2 Feb 24, 2025
0.9.0 Feb 2, 2025

#449 in Rust patterns

Download history 380/week @ 2025-01-17 146/week @ 2025-01-24 383/week @ 2025-01-31 59/week @ 2025-02-07 15/week @ 2025-02-14

829 downloads per month
Used in 2 crates

Custom license

71KB
1.5K SLoC

Script Format

I regularly needed to output data in a custom format, which is why I created a DSL based on Rhai.

Demo

cargo run -q -- -s test_format.rhai -i test.json

DSL

The most important part of the DSL is the ++ operator.

The ++ operator takes the values to its left and right and stores them internally. Once the script is done running, all the stored values get concatenated and returned.

This allows for a really nice way to express what should get output:

let some_number = 1;

// will output 'Test 1'
~ "Test " ++ some_number;

There are also a two more conveniences, namely NL and IND.

  • NL is a constant holding the newline character (\r).
  • IND is a constant holding the indentation string (Default: four spaces).

There are also functions with the same name that take a number and return the value that amount of time. So if you want to indent something by 3 levels, you can just write IND(3).

If your indentation is different than four spaces, you can set the string for a single indentation level with the function SET_INDENT.

Quick Start

In order to use the DSL you need create a FormattingEngine and register all types you want to work with.

After that, you can just call the appropriate format function to format your data.

Dependencies

~9.5MB
~182K SLoC