1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
//! A zero-copy MAME ListInfo format DAT files parser and deserializer. //! //! ## Usage //! listinfo-rs provides a lower-level zero-copy expression tree API //! as well as a more user friendly Serde deserialization API. //! //! Illustrated here is an example with the expression tree API //! //! ```rust //! #[test] //! fn parse_cave_story() { //! const CAVE_STORY: &str = r#"clrmamepro ( //! name "Cave Story" //! description "Cave Story" //! version 20161204 //! comment "libretro | www.libretro.com" //! ) //! game ( //! name "Cave Story (En)" //! description "Cave Story (En)" //! developer "Studio Pixel" //! releaseyear "2004" //! rom ( //! name "Doukutsu.exe" //! size 1478656 //! crc c5a2a3f6 //! md5 38695d3d69d7a0ada8178072dad4c58b //! sha1 bb2d0441e073da9c584f23c2ad8c7ab8aac293bf //! ) //! ) //! "#; //! //! let document = parse::parse_document(CAVE_STORY).unwrap(); //! let header = document.entry("clrmamepro").unwrap().next().unwrap(); //! let game = document.entry("game").unwrap().next().unwrap(); //! let rom = game.entry_unique("rom").unwrap(); //! assert_eq!( //! header.entry_unique("name"), //! Some(&EntryData::Scalar("Cave Story")) //! ); //! assert_eq!( //! game.entry_unique("name"), //! Some(&EntryData::Scalar("Cave Story (En)")) //! ); //! assert_eq!( //! header.entry_unique("name"), //! Some(&EntryData::Scalar("Cave Story")) //! ); //! if let EntryData::SubEntry(rom) = rom { //! assert_eq!(rom.value_unique("name"), Some("Doukutsu.exe")) //! } //! } //! ``` //! //! ## Features //! listinfo-rs supports the following features //! * `std` Enables `std` support (enabled by default) //! * `deserialize` Enables support for serde deserialization //! //! ## `no_std` //! listinfo-rs requires `alloc`, but otherwise is fully supported on `#![no_std]` //! environments. //! //! You can enable `no_std` support like in Cargo.toml //! //! ```toml //! listinfo = { version = "0.3", default-features = false } //! ``` #![cfg_attr(not(feature = "std"), no_std)] #[cfg(not(feature = "std"))] extern crate alloc; #[cfg(feature = "std")] extern crate std as alloc; mod elements; mod error; /// Iterator types for ListInfo elements. pub mod iter; #[cfg(test)] mod tests; /// ListInfo parsing functions. pub mod parse; #[cfg(feature="deserialize")] /// Serde `Deserializer` implementation. pub mod de; pub use error::*; pub use elements::*;