edn-rs

Crate to parse and emit EDN Build Status * This lib does not make effort to conform the EDN received to EDN Spec. The lib that generated this EDN should be responsible for this. * Current example usage in crate https://crates.io/crates/transistor

Usage

Cargo.toml toml [dependencies] edn-rs = "0.6.2"

Parse an EDN into a Edn with edn! macro: ```rust

![recursion_limit="512"]

[macro_use]

extern crate edn_rs;

fn main() { let edn = edn!((sym 1.2 3 false :f nil 3/4)); let expected = Edn::List( List::new( vec![ Edn::Symbol("sym".tostring()), Edn::Double(1.2.into()), Edn::Int(3), Edn::Bool(false), Edn::Key("f".tostring()), Edn::Nil, Edn::Rational("3/4".to_string()) ] ) );

assert_eq!(edn, expected);

} ```

To navigate through Edn data you can just use get and get_mut:

```rust let edn = edn!([ 1 1.2 3 {false :f nil 3/4}]);

asserteq!(edn[1], edn!(1.2)); asserteq!(edn[1], Edn::Double(1.2f64.into())); asserteq!(edn[3]["false"], edn!(:f)); asserteq!(edn[3]["false"], Edn::Key("f".to_string())); ```

Serializes Rust Types into EDN ```rust #![recursionlimit="512"] #[macrouse] extern crate edn_rs;

use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; use crate::edn_rs::serialize::Serialize;

fn main() { serstruct!{ #[derive(Debug, Clone)] struct Edn { btreemap: BTreeMap>, btreeset: BTreeSet, hashmap: HashMap>, hashset: HashSet, tuples: (i32, bool, char), } }; let edn = Edn { btreemap: map!{"this is a key".tostring() => vec!["with".tostring(), "many".tostring(), "keys".tostring()]}, btreeset: set!{3i64, 4i64, 5i64}, hashmap: hmap!{"this is a key".tostring() => vec!["with".tostring(), "many".tostring(), "keys".to_string()]}, hashset: hset!{3i64}, tuples: (3i32, true, 'd') };

 println!("{}",edn.serialize());
 // { :btreemap {:this-is-a-key [\"with\", \"many\", \"keys\"]}, :btreeset #{3, 4, 5}, :hashmap {:this-is-a-key [\"with\", \"many\", \"keys\"]}, :hashset #{3}, :tuples (3, true, \\d), }

} ```

Emits EDN format from a Json file ```rust use ednrs::jsonto_edn;

fn main() { let json = String::from("{\"hello\": \"world\"}"); let edn = String::from("{:hello \"world\"}");

 assert_eq!(edn, json_to_edn(json));

} ```

Current Features

Could be done in another project edn-derive