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
#![allow(dead_code)]
extern crate yaml_rust;

mod frontmatter {
    use yaml_rust::{Yaml, YamlLoader};
    use yaml_rust::scanner::ScanError;

    pub fn parse(text: &str) -> Result<Option<Yaml>, ScanError> {
        println!("Parse Test: {}", text);
        match text.starts_with("---\n") {
            true => {
                println!("Starts with marker");

                let slice_after_marker = &text[4..];
                let fm_end = slice_after_marker.find("---");

                println!("{:?}", fm_end);

                if fm_end.is_none() {
                    return Ok(None)
                };

                let fm_end = fm_end.unwrap();

                println!("{:?}", fm_end);

                let yaml_str = &text[4..4+fm_end];

                println!("{:?}", yaml_str);

                let mut documents = try!(YamlLoader::load_from_str(yaml_str));

                Ok(documents.pop())
            },
            false => Ok(None)
        }
    }

    #[test]
    fn test_valid() {
        let test_string = "---\ntitle: Valid Yaml Test\n---\nsomething that's not yaml";

        let matter = parse(test_string);
        println!("Original String{:?}", test_string);
        println!("Matter: {:?}", matter);
        assert!(matter.is_ok());
        let matter = matter.unwrap();
        assert!(matter.is_some());
        let matter = matter.unwrap();
        assert!(matter.as_hash().is_some());
    }

    #[test]
    fn test_none() {
        let test_string = "something that's not yaml even if it has\n---\nsome: yaml\n--";

        let matter = parse(test_string);
        println!("Original String{:?}", test_string);
        println!("Matter: {:?}", matter);
        assert!(matter.is_ok());
        let matter = matter.unwrap();
        assert!(matter.is_none());
    }


    #[test]
    fn test_empty() {
        let test_string = "---\n---\nsomething that's not yaml";

        let matter = parse(test_string);
        println!("Original String{:?}", test_string);
        println!("Matter: {:?}", matter);
        assert!(matter.is_ok());
        let matter = matter.unwrap();
        assert!(matter.is_none());
    }
}


#[test]
fn test_tests() {
    assert_eq!(2+2, 4);
}