syn-serde

Build Status Crates.io Docs.rs License Minimum supported Rust version

Library to serialize and deserialize [Syn] syntax trees.

Documentation

Usage

Add this to your Cargo.toml:

toml [dependencies] syn-serde = "0.1"

The current syn-serde requires Rust 1.31 or later.

Examples

toml [dependencies] syn-serde = { version = "0.1", features = ["json"] } syn = { version = "1", features = ["full"] }

```rust use syn_serde::json;

let synfile: syn::File = syn::parsequote! { fn main() { println!("Hello, world!"); } };

println!("{}", json::tostringpretty(&syn_file)?); ```

This prints the following JSON:

json { "items": [ { "fn": { "ident": "main", "inputs": [], "output": null, "stmts": [ { "semi": { "macro": { "path": { "segments": [ { "ident": "println" } ] }, "delimiter": "paren", "tokens": [ { "lit": "\"Hello, world!\"" } ] } } } ] } } ] }

Rust source file -> JSON representation of the syntax tree

The [rust2json] example parse a Rust source file into a syn_serde::File and print out a JSON representation of the syntax tree.

JSON file -> Rust syntax tree

The [json2rust] example parse a JSON file into a syn_serde::File and print out a Rust syntax tree.

Optional features

Relationship to Syn

syn-serde is a fork of [Syn], and syn-serde provides a set of data structures similar but not identical to [Syn]. All data structures provided by syn-serde can be converted to the data structures of [Syn] and [proc-macro2].

The data structures of syn-serde 0.1 is compatible with the data structures of [Syn] 1.0.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.