.. | ||
.github | ||
ci | ||
codegen | ||
examples | ||
src | ||
tests | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
Cargo.toml | ||
CHANGELOG.md | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
syn.json |
syn-serde
Library to serialize and deserialize Syn syntax trees.
Usage
Add this to your Cargo.toml
:
[dependencies]
syn-serde = "0.2"
The current syn-serde requires Rust 1.31 or later.
Examples
[dependencies]
syn-serde = { version = "0.2", features = ["json"] }
syn = { version = "1", features = ["full"] }
use syn_serde::json;
let syn_file: syn::File = syn::parse_quote! {
fn main() {
println!("Hello, world!");
}
};
println!("{}", json::to_string_pretty(&syn_file));
This prints the following 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
json
— Provides functions for JSON <-> Rust serializing and deserializing.
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.2 is compatible with the data structures of Syn 1.0.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.