2015-05-31 09:59:43 +00:00
|
|
|
// 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<Yaml>` 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
|
2015-06-29 16:31:22 +00:00
|
|
|
//!
|
2015-05-31 09:59:43 +00:00
|
|
|
//! 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
|
|
|
|
//!
|
|
|
|
//! ```
|
|
|
|
|
2019-03-07 06:27:03 +00:00
|
|
|
#![doc(html_root_url = "https://docs.rs/yaml-rust/0.4.3")]
|
2018-09-15 17:02:56 +00:00
|
|
|
#![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
|
2017-05-08 18:30:51 +00:00
|
|
|
#![cfg_attr(feature = "cargo-clippy", warn(cyclomatic_complexity))]
|
2018-09-15 17:06:46 +00:00
|
|
|
#![cfg_attr(
|
|
|
|
feature = "cargo-clippy",
|
|
|
|
allow(match_same_arms, should_implement_trait)
|
|
|
|
)]
|
2016-02-28 00:30:13 +00:00
|
|
|
|
2016-03-20 05:06:44 +00:00
|
|
|
extern crate linked_hash_map;
|
|
|
|
|
2015-05-31 04:56:45 +00:00
|
|
|
pub mod emitter;
|
2018-09-15 16:49:04 +00:00
|
|
|
pub mod parser;
|
|
|
|
pub mod scanner;
|
|
|
|
pub mod yaml;
|
2015-05-24 19:29:52 +00:00
|
|
|
|
2015-05-31 09:02:22 +00:00
|
|
|
// reexport key APIs
|
2020-05-27 06:15:28 +00:00
|
|
|
pub use crate::emitter::{EmitError, YamlEmitter};
|
|
|
|
pub use crate::parser::Event;
|
|
|
|
pub use crate::scanner::ScanError;
|
|
|
|
pub use crate::yaml::{Yaml, YamlLoader};
|
2015-05-31 09:02:22 +00:00
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use super::*;
|
2015-07-02 15:46:04 +00:00
|
|
|
|
2015-05-31 09:02:22 +00:00
|
|
|
#[test]
|
|
|
|
fn test_api() {
|
2018-09-15 16:49:04 +00:00
|
|
|
let s = "
|
2015-05-31 09:02:22 +00:00
|
|
|
# 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();
|
|
|
|
}
|
|
|
|
|
2016-02-28 00:30:13 +00:00
|
|
|
assert!(!writer.is_empty());
|
2015-05-31 09:02:22 +00:00
|
|
|
}
|
|
|
|
|
2015-07-02 15:46:04 +00:00
|
|
|
fn try_fail(s: &str) -> Result<Vec<Yaml>, ScanError> {
|
2018-09-16 06:58:48 +00:00
|
|
|
let t = YamlLoader::load_from_str(s)?;
|
2015-07-02 15:46:04 +00:00
|
|
|
Ok(t)
|
|
|
|
}
|
|
|
|
|
2015-05-31 09:02:22 +00:00
|
|
|
#[test]
|
|
|
|
fn test_fail() {
|
2018-09-15 16:49:04 +00:00
|
|
|
let s = "
|
2015-05-31 09:02:22 +00:00
|
|
|
# syntax error
|
|
|
|
scalar
|
|
|
|
key: [1, 2]]
|
|
|
|
key1:a2
|
|
|
|
";
|
|
|
|
assert!(YamlLoader::load_from_str(s).is_err());
|
2015-07-02 15:46:04 +00:00
|
|
|
assert!(try_fail(s).is_err());
|
2015-05-31 09:02:22 +00:00
|
|
|
}
|
|
|
|
|
2015-05-24 06:27:42 +00:00
|
|
|
}
|