map_parser/
qp.rs

1use super::qua::QuaverMap;
2use std::collections::HashMap;
3use std::io::Read;
4use zip;
5
6#[derive(Debug)]
7pub struct QuaverMapset {
8    pub maps: HashMap<String, QuaverMap>,
9}
10
11impl QuaverMapset {
12    pub fn from_path(path: &str) -> Self {
13        let mut self_ = Self {
14            maps: HashMap::new(),
15        };
16
17        let qp_file = std::fs::File::open(path).unwrap();
18
19        let zip = zip::ZipArchive::new(&qp_file).unwrap();
20
21        for name in zip.file_names() {
22            if name.contains(".qua") {
23                let mut contents = String::new();
24                let mut zip = zip::ZipArchive::new(&qp_file).unwrap();
25                let mut qua_file = zip.by_name(name).unwrap();
26                qua_file.read_to_string(&mut contents).unwrap();
27                self_
28                    .maps
29                    .insert(name.replace(".qua", ""), QuaverMap::from_string(&contents));
30            }
31        }
32
33        self_
34    }
35}