SML
SML
is a simple markup language designed to convert human readable information into Rust
types, focusing on simplicity, usability and hands-on control. Its optimal usage is in loading
config files and schemas.
The format looks like
hobbit:
name: "Frodo Baggins"
age: "98"
friends:
hobbit:
name: "Bilbo Baggins"
age: "176"
hobbit:
name: "Samwise Gamgee"
age: "66"
Data Format Rules
-
Indentation has meaning and is 4 spaces, relative to the top key. If indenting is relative to the top key, then you can neatly align strings embedded in code.
-
All values must be double quoted.
-
Every key/value combination must be nested in a key. For example
hobbit: "Frodo"
by itself is invalid. It can be written:
hobbit:
name: "Frodo"
The motivation behind this is for the data format to distinguish clearly between whole data structures, which are headed by a key only, and parts of a data structure which are either key/value pairs, representing fields or variants, or other data-structures, which again are headed by a key only.
-
Separation of lines has meaning.
-
Keys must not include but must be followed by a colon
:
. -
Double quotes in values must be escaped using
\"
. -
Everything after the second double quote is ignored (and can be used for commenting).
-
Empty lines or lines with whitespace only are ignored.
Example. From Small
-formatted string to your data-structure.
The following two examples should cover 90 percent of use cases. data-structure.
use ;
FromSmall
Trait
Types that implement the FromSmall
trait can be constructed from a Small
-formatted string.
Required function:
from_small
The from_small()
function describes how to create a data-structure from the parts of
SmallRef
. See example 1 for canonical usage.
path
Reduces SmallRef
to the key_path
and then uses the FromSmall
trait to convert to the
receiver type.
from_str
Top level function that convert a Small
-formatted string into the receiver.
from_str_debug
Top level function that converts a Small
-formatted string into the receiver giving helpful
error messages for debugging.