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
#![feature(custom_attribute)]

extern crate zip;
extern crate serde;
extern crate serde_json;
#[macro_use] extern crate serde_derive;
#[macro_use] extern crate nom;
extern crate failure;

use std::io::Read;

use failure::Error;
use atlas::Atlas;
use spine::Spine;

pub mod spine;
pub mod atlas;

pub struct SpineProject {
    pub spine: Spine,
    pub atlas: Atlas,
}

impl SpineProject {
    pub fn parse<S : Read, A : Read>(spine_reader: S, atlas_reader: A) -> Result<SpineProject, Error> {
        let spine = Spine::parse(spine_reader)?;
        let atlas = Atlas::parse(atlas_reader)?;

        Ok(SpineProject {
            spine,
            atlas,
        })
    }
}

#[cfg(test)]
mod tests {
    use std::fs::File;
    use super::*;

    #[test]
    fn test_load_spine_project() {
        let json = File::open("Cowbot/Cowbot.json").expect("Could not open JSON file");
        let atlas = File::open("Cowbot/Cowbot_tex.atlas").expect("Could not open Atlas file");
        SpineProject::parse(json, atlas).unwrap();
    }
}