[−][src]Crate sml
SML
SML
is a simple markup language. It is designed to convert human readable information into
Rust data-structures.
Data Format
- Each line can either be just a key, for example
key:
or it can be a key/value pair, for example
key: "value"
-
Indentation has meaning and is 4 spaces. The first key on the first line determines the alignment of indentation.
-
All values must be double quoted.
-
Every key/value pair must be nested in a key. For example
hobbit: "Frodo"
by itself is invalid. It can be written:
hobbit: name: "Frodo"
Thinking in terms of Rust data-structures, a key without a value represents a struct
or an
enum
while a key/value pair represents a struct
field or enum
variant.
-
Separation of lines has meaning.
-
Keys may not include
:
. -
Double quotes in values must be escaped using
\"
. -
There can be an arbitary amount of whitespace and returns before the first key and after the last key.
-
Characters after the second double-quote in the value are ignored (so this space can be used for comments).
Example
Create a data-structure from a small-formatted string,
use sml::{Small, FromSmall, SmallError}; #[derive(Debug)] struct Hobbit { name: String, age: u32, friends: Vec<Hobbit>, bicycle: Option<String>, } impl FromSmall for Hobbit { fn from_small(small: Small) -> Result<Self, SmallError> { Ok(Self { name: String::sml(&small, "hobbit::name")?, age: u32::sml(&small, "hobbit::age")?, friends: Vec::<Hobbit>::sml(&small, "hobbit::friends::hobbit")?, bicycle: Option::<String>::sml(&small, "hobbit::bicycle")?, }) } } fn main() { let s = r#" hobbit: name: "Frodo Baggins" age: "98" friends: hobbit: name: "Bilbo Baggins" age: "176" hobbit: name: "Samwise Gamgee" age: "66""#; let frodo = Hobbit::from_str_debug(s); }
and create a small-formatted string from a data-structure,
use sml::{Small, ToSmall, SmallError}; #[derive(Debug)] struct Hobbit { name: String, age: u32, friends: Vec<Hobbit>, bicycle: Option<String>, } impl ToSmall for Hobbit { fn to_small(&self) -> Small { Small::key("hobbit") .append(self.name) .append(self.age) .append(self.friends) .append(self.bicycle); } } println!("{}", frodo::<ToSmall>::to_string()); // hobbit: // name: "Frodo Baggins" // age: "98" // friends: // hobbit: // name: "Bilbo Baggins" // age: "176" // hobbit: // name: "Samwise Gamgee" // age: "66"
Structs
Small |
|
Token | The |
Tokens |
Enums
SmallError |
Traits
FromSmall | Data-structures that implement the |
ToSmall |