7 releases

0.2.3 Jan 2, 2022
0.2.2 Nov 14, 2021
0.2.0 Oct 20, 2021
0.1.2 Oct 11, 2021

#1442 in Parser implementations

Download history 214/week @ 2024-07-19 363/week @ 2024-07-26 167/week @ 2024-08-02 116/week @ 2024-08-09 182/week @ 2024-08-16 167/week @ 2024-08-23 311/week @ 2024-08-30 499/week @ 2024-09-06 340/week @ 2024-09-13 318/week @ 2024-09-20 289/week @ 2024-09-27 318/week @ 2024-10-04 279/week @ 2024-10-11 58/week @ 2024-10-18 305/week @ 2024-10-25 190/week @ 2024-11-01

891 downloads per month
Used in timens

MIT/Apache

34KB
898 lines

rsexp

S-expression library for Rust.

Build Status Latest version Documentation License

This implemantion aims at being compatible with OCaml's sexplib. The main type for S-expression is as follows:

pub enum Sexp {
    Atom(Vec<u8>),
    List(Vec<Sexp>),
}

Reading and Writing Sexp Files

Reading a sexp file can be done by first reading the whole file content and then converting the resulting slice into a Sexp object as follows:

    let contents = std::fs::read(input_filename)?;
    let sexp = rsexp::from_slice(&contents)?;

Writing a sexp file can be done by first serializing the data to a buffer then writing this buffer out. Alternatively, the sexp.write(w)? function can be used to directly output the data to a w object that implements the Write trait.

    let data = sexp.to_bytes();
    std::fs::write(output_filename, data)?;

Conversion to/from Native Types

The OfSexp and SexpOf traits define some functions to convert a given type from/to a Sexp. These traits are implemented for most basic types, including maps. Two associated derive macros can be used to define these traits on structs and enums.

#[derive(OfSexp, SexpOf)]
struct StructXYZ {
    x: i64,
    y: Option<(i32, i32)>,
    z: String,
}

#[derive(OfSexp, SexpOf)]
enum Abc {
    A(StructXYZ),
    B { x: i64, z: String },
    C,
}


    let sexp = abc.sexp_of();
    let abc: Abc = sexp.of_sexp()?;

No runtime deps