[−][src]Macro edn_rs::edn
Macro to parse EDN
into Rust Spec:
#![recursion_limit="512"] //recomended recursion size #[macro_use] extern crate edn_rs; use edn_rs::edn::{Edn, List, Set, Map}; fn main() { let list = edn!((1 1.2 3 false :f nil 3/4)); let expected = Edn::List( List::new( vec![ Edn::Int(1), Edn::Double(1.2.into()), Edn::Int(3), Edn::Bool(false), Edn::Key(":f".to_string()), Edn::Nil, Edn::Rational("3/4".to_string()) ] ) ); assert_eq!(list, expected); let set = edn!(#{1 1.2 3 false :f nil 3/4}); let expected = Edn::Set( Set::new( set!{ Edn::Int(1), Edn::Double(1.2.into()), Edn::Int(3), Edn::Bool(false), Edn::Key(":f".to_string()), Edn::Nil, Edn::Rational("3/4".to_string()) } ) ); assert_eq!(set, expected); let map = edn!({1.2 false, :b 3/4}); let expected = Edn::Map( Map::new( map!{ String::from("1.2") => Edn::Bool(false), // Note `:b` becomes `b` String::from(":b") => Edn::Rational(String::from("3/4")) } ) ); assert_eq!(map, expected); }
A more complete exemple:
#[macro_use] extern crate edn_rs; use edn_rs::edn::{Edn, List, Vector, Map}; fn main() { let expected = Edn::List( List::new( vec![ Edn::Int(1), Edn::Double(1.2.into()), Edn::Int(3), Edn::Map( Map::new( map![ String::from("false") => Edn::Map( Map::new( map![ String::from(":f") => Edn::Key(String::from(":b")) ])), String::from("nil") => Edn::Vector( Vector::new( vec![ Edn::Rational("3/4".to_string()), Edn::Int(1isize) ])) ])) ] ) ); assert_eq!(edn!(( 1 1.2 3 {false {:f :b} nil [3/4 1]})), expected); }
To navigate through Edn
data you can just use get
and get_mut
:
#[macro_use] extern crate edn_rs; use edn_rs::edn::{Edn, Map, Vector}; fn main() { let edn = edn!([ 1 1.2 3 {false :f nil 3/4}]); assert_eq!(edn[1], edn!(1.2)); assert_eq!(edn[1], Edn::Double(1.2f64.into())); assert_eq!(edn[3]["false"], edn!(:f)); assert_eq!(edn[3]["false"], Edn::Key(":f".to_string())); }
Internal implementation is hidden, please look at source.