1#![doc(html_root_url = "https://docs.rs/unity-yaml-rust/0.1.0")]
37#![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
38#![cfg_attr(
39 feature = "cargo-clippy",
40 allow(match_same_arms, should_implement_trait)
41)]
42
43
44pub mod emitter;
45pub mod parser;
46pub mod scanner;
47pub mod yaml;
48
49pub use crate::emitter::{EmitError, YamlEmitter};
51pub use crate::parser::Event;
52pub use crate::scanner::ScanError;
53pub use crate::yaml::{Yaml, YamlLoader};
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn test_api() {
61 let s = "
62# from yaml-cpp example
63- name: Ogre
64 position: [0, 5, 0]
65 powers:
66 - name: Club
67 damage: 10
68 - name: Fist
69 damage: 8
70- name: Dragon
71 position: [1, 0, 10]
72 powers:
73 - name: Fire Breath
74 damage: 25
75 - name: Claws
76 damage: 15
77- name: Wizard
78 position: [5, -3, 0]
79 powers:
80 - name: Acid Rain
81 damage: 50
82 - name: Staff
83 damage: 3
84";
85 let docs = YamlLoader::load_from_str(s).unwrap();
86 let doc = &docs[0];
87
88 assert_eq!(doc[0]["name"].as_str().unwrap(), "Ogre");
89
90 let mut writer = String::new();
91 {
92 let mut emitter = YamlEmitter::new(&mut writer);
93 emitter.dump(doc).unwrap();
94 }
95
96 assert!(!writer.is_empty());
97 }
98
99 fn try_fail(s: &str) -> Result<Vec<Yaml>, ScanError> {
100 let t = YamlLoader::load_from_str(s)?;
101 Ok(t)
102 }
103
104 #[test]
105 fn test_fail() {
106 let s = "
107# syntax error
108scalar
109key: [1, 2]]
110key1:a2
111";
112 assert!(YamlLoader::load_from_str(s).is_err());
113 assert!(try_fail(s).is_err());
114 }
115
116}