Crates.io | lexpr |
lib.rs | lexpr |
version | 0.2.7 |
source | src |
created_at | 2019-02-09 03:49:50.550015 |
updated_at | 2023-03-16 20:47:03.128021 |
description | A representation for Lisp data |
homepage | |
repository | https://github.com/rotty/lexpr-rs |
max_upload_size | |
id | 113642 |
size | 305,402 |
You may be looking for:
S-expressions are the
human-readable, textual representation of code and data in the Lisp
family of languages. lexpr
aims to provide the tools to:
Embed S-expression data into Rust programs using the sexp
macro:
use lexpr::sexp;
let address = sexp!(((name . "Jane Doe") (street . "4026 Poe Lane")));
Construct and destructure S-expression data using a full-featured API:
use lexpr::Value;
let names = Value::list(vec!["Alice", "Bob", "Mallory"]);
println!("The bad guy is {}", names[2].as_str().unwrap());
Parse and serialize S-expression data from and to its textual representation.
Use S-expressions as surface syntax for a configuration file format
or other domain-specific language (DSL). lexpr
allows obtaining
source location information for the parsed data, so you can give
error messages that point to the exact place a problem was detected,
in case the source was parsed successfully as S-expression data, but
the parsed data does not meet the requirements of your DSL.
To get a better idea of the direction lexpr
is headed, you may want
to take at the TODO or the "why"
document.
lexpr
is CI-tested on current stable, beta and nightly channels of
Rust. Additionally, it is made sure that the code still compiles on
Rust 1.45.0. However, no tests are run for that build.
Currently, lexpr
focuses on Scheme, mostly based on R6RS and R7RS
syntax, with some extensions, and Emacs Lisp.
Dialect-specific omissions, both ones that are planned to be fixed in the future, and deliberate ones, are listed below. If you are missing a feature that is not yet listed here, please [file an issue]!.
#!fold-case
and #!no-fold-case
are not
implemented. It's not clear if these will be implemented at all.lexpr
only supports a subset of Emacs Lisp are
strings and characters. You can have a look at the gory
details.The code and documentation in the lexpr
crate is free
software, dual-licensed
under the MIT or Apache-2.0
license, at your choosing.
The lexpr
repository contains code and documentation adapted from
the following projects:
serde_json
, also dual-licensed
under MIT/Apache-2.0 licenses.sexpr
, Copyright 2017 Zephyr
Pellerin, dual-licensed under the same licenses.