lexpr 0.2.3

A representation for Lisp data
Documentation

lexpr: S-expressions for Rust Latest Version Rustc Version 1.32+

[dependencies]
lexpr = "0.2.3"

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.

To get a better idea of the direction lexpr is headed, you may want to take at the TODO or the "why" document.

Supported Lisp dialects

Currently, lexpr focuses on Scheme, mostly based on R6RS and R7RS syntax, with some extensions, and Emacs Lisp. The following features, common across dialects, are not yet implemented:

  • Syntactic shorthands for quote, quasiquote, unquote and unquote-splicing. Again, these are not usually important when using S-expressions as a data exchange format.
  • Support for number syntax is currently quite limited. Integers and floating point values written in decimal notation should work though.

Further 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]!.

Scheme

  • For strings, continuation line syntax (using a trailing slash) is not yet implemented.
  • Block comments.
  • Directives, such as #!fold-case and #!no-fold-case are not implemented. It's not clear if these will be implemented at all.

Emacs Lisp

The main area where lexpr only supports a subset of Emacs Lisp are strings and characters. You can have a look at the gory details.

Licensing

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.