// Copyright 2015, Yuheng Chen. See the LICENSE file at the top-level // directory of this distribution. //! YAML 1.2 implementation in pure Rust. //! //! # Usage //! //! This crate is [on github](https://github.com/chyh1990/yaml-rust) and can be //! used by adding `yaml-rust` to the dependencies in your project's `Cargo.toml`. //! //! ```toml //! [dependencies.yaml-rust] //! git = "https://github.com/chyh1990/yaml-rust.git" //! ``` //! //! And this in your crate root: //! //! ```rust //! extern crate yaml_rust; //! ``` //! //! Parse a string into `Vec` and then serialize it as a YAML string. //! //! # Examples //! //! ``` //! use yaml_rust::{YamlLoader, YamlEmitter}; //! //! let docs = YamlLoader::load_from_str("[1, 2, 3]").unwrap(); //! let doc = &docs[0]; // select the first document //! assert_eq!(doc[0].as_i64().unwrap(), 1); // access elements by index //! //! let mut out_str = String::new(); //! let mut emitter = YamlEmitter::new(&mut out_str); //! emitter.dump(doc).unwrap(); // dump the YAML object to a String //! //! ``` #![doc(html_root_url = "https://docs.rs/yaml-rust/0.4.5")] #![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))] #![cfg_attr(feature = "cargo-clippy", warn(cyclomatic_complexity))] #![cfg_attr( feature = "cargo-clippy", allow(match_same_arms, should_implement_trait) )] extern crate linked_hash_map; pub mod emitter; pub mod parser; pub mod scanner; pub mod yaml; // reexport key APIs pub use crate::emitter::{EmitError, YamlEmitter}; pub use crate::parser::Event; pub use crate::scanner::ScanError; pub use crate::yaml::{Yaml, YamlLoader}; #[cfg(test)] mod tests { use super::*; #[test] fn test_api() { let s = " # from yaml-cpp example - name: Ogre position: [0, 5, 0] powers: - name: Club damage: 10 - name: Fist damage: 8 - name: Dragon position: [1, 0, 10] powers: - name: Fire Breath damage: 25 - name: Claws damage: 15 - name: Wizard position: [5, -3, 0] powers: - name: Acid Rain damage: 50 - name: Staff damage: 3 "; let docs = YamlLoader::load_from_str(s).unwrap(); let doc = &docs[0]; assert_eq!(doc[0]["name"].as_str().unwrap(), "Ogre"); let mut writer = String::new(); { let mut emitter = YamlEmitter::new(&mut writer); emitter.dump(doc).unwrap(); } assert!(!writer.is_empty()); } fn try_fail(s: &str) -> Result, ScanError> { let t = YamlLoader::load_from_str(s)?; Ok(t) } #[test] fn test_fail() { let s = " # syntax error scalar key: [1, 2]] key1:a2 "; assert!(YamlLoader::load_from_str(s).is_err()); assert!(try_fail(s).is_err()); } }