1#![doc = include_str!("../README.md")]
2
3use shapely_core::{Partial};
4use yaml_rust2::YamlLoader;
5
6pub fn from_yaml<'input>(partial: &mut Partial, yaml: &'input str) -> Result<(), String> {
7 let docs = YamlLoader::load_from_str(yaml).map_err(|e| e.to_string())?;
8
9 let doc = &docs[0];
11 match doc {
12 yaml_rust2::Yaml::Hash(hash) => {
13 for (key, value) in hash {
14 let key_str = match key.as_str() {
15 Some(s) => s,
16 None => return Err("Expected string key".to_string()),
17 };
18
19 let slot = partial
20 .slot_by_name(key_str)
21 .map_err(|_| format!("Unknown field: {}", key_str))?;
22
23 match value {
24 yaml_rust2::Yaml::String(s) => {
25 slot.fill(s.clone());
26 }
27 yaml_rust2::Yaml::Integer(i) => {
28 slot.fill(*i as u64);
29 }
30 _ => {
31 println!("Unsupported YAML type for field: {}", key_str);
32 unimplemented!()
33 }
34 }
35 }
36 }
37 _ => {
38 return Err("Expected a YAML hash".to_string());
39 }
40 }
41
42 Ok(())
43}
44
45#[cfg(test)]
46mod tests {
47 #[test]
48 fn it_works() {
49 assert_eq!(2 + 2, 4);
50 }
51}