Expand description
The Value enum, a dynamically typed way of representing any valid S-expression value.
§Constructing S-Expressions
Lexpr provides a sexp! macro to build lexpr::Value
objects with very natural S-expression syntax.
use lexpr::sexp;
// The type of `john` is `lexpr::Value`
let john = sexp!((
(name . "John Doe")
(age . 43)
(phones "+44 1234567" "+44 2345678")
));
println!("first phone number: {}", john["phones"][0]);
// Convert to a string of S-expression data and print it out
println!("{}", john.to_string());The Value::to_string() function converts a lexpr::Value into a
String of S-expression text.
One neat thing about the sexp! macro is that variables and
expressions can be interpolated directly into the S-expression
value as you are building it. The macro will check at compile time
that the value you are interpolating is able to be represented as
S-expression data.
To interpolate, use the comma (,, also known as “unqote” in
Lisp). The interpolated expression must either be a single token,
or surrounded by round or curly braces.
let full_name = "John Doe";
let age_last_year = 42;
// The type of `john` is `lexpr::Value`
let john = sexp!((
(name . ,full_name)
(age . ,(age_last_year + 1))
(phones ,{ format!("+44 {}", random_phone()) })
));A string of S-expression data can be parsed into a lexpr::Value by the
lexpr::from_str function. There is also
from_slice for parsing from a byte slice &[u8] and
from_reader for parsing from any io::Read like a file or
a TCP stream. For all these functions there also is a _custom variant
which allows for specifying parser options, in case the input deviates from
the lexpr default behavior.
use lexpr::{sexp, parse::Error, Value};
// Some S-expression input data as a &str. Maybe this comes from the user.
let data = r#"(
(name . "John Doe")
(age . 43)
(phones . (
"+44 1234567"
"+44 2345678"
))
)"#;
// Parse the string of data into lexpr::Value.
let v: Value = lexpr::from_str(data)?;
// Access parts of the data by indexing with square brackets.
println!("Please call {} at the number {}", v["name"], v["phones"][0]);Enums§
- Value
- Represents an S-expression value.
Traits§
- Index
- A type that can be used to index into a
lexpr::Value.