A Rust library for the MuON data format, using serde.
See documentation for more information.
The easiest way to deserialize data is to derive serde::Deserialize
on
a struct. Then use one of the from_
functions.
MuON file:
book: Pale Fire
author: Vladimir Nabokov
year: 1962
character: John Shade
location: New Wye
character: Charles Kinbote
location: Zembla
book: The Curious Incident of the Dog in the Night-Time
author: Mark Haddon
year: 2003
character: Christopher Boone
location: Swindon
character: Siobhan
Rust code:
#[derive(Debug, Deserialize, Serialize)]
struct BookList {
book: Vec<Book>,
}
#[derive(Debug, Deserialize, Serialize)]
struct Book {
title: String,
author: String,
year: Option<i16>,
character: Vec<Character>,
}
#[derive(Debug, Deserialize, Serialize)]
struct Character {
name: String,
location: Option<String>,
}
let muon = File::open("tests/books.muon")?;
let books: BookList = muon_rs::from_reader(muon)?;
println!("{:?}", books);
Deriving serde::Serialize
on a struct is just as easy. The to_
functions are used to serialize MuON data.
let books = BookList {
book: vec![
Book {
title: "Flight".to_string(),
author: "Sherman Alexie".to_string(),
year: Some(2007),
character: vec![
Character {
name: "Zits".to_string(),
location: Some("Seattle".to_string()),
},
Character {
name: "Justice".to_string(),
location: None,
},
],
},
],
};
let muon = muon_rs::to_string(&books)?;
println!("{:?}", muon);
MuON types can be mapped to different Rust types.
MuON Type | Rust Types |
---|---|
text | String |
bool | bool |
int | i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize |
number | f32 f64 |
datetime | DateTime |
date | Date |
time | Time |
record | struct implementing Deserialize |
dictionary | HashMap |
any | Value |
Any feedback, bug reports or enhancement requests are welcome! Please create an issue and join the fun.