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
use crate::darksiders1::gfc;
use failure::Error;
use std::path::PathBuf;

pub fn open_packages(
    root: impl Into<PathBuf>,
) -> Result<(Manifest, gfc::ResourcePackageList), Error> {
    let mut directory_manager = gfc::DirectoryManager::new(root)?;
    let package_list = gfc::ResourceManager::init(&mut directory_manager)?;
    let manifest = Manifest { directory_manager };
    Ok((manifest, package_list))
}

pub struct Manifest {
    directory_manager: gfc::DirectoryManager,
}

impl Manifest {
    pub fn load_package(
        &mut self,
        resource_package_info: &gfc::ResourcePackageInfo,
    ) -> Result<Vec<gfc::Resource>, Error> {
        gfc::ResourceManager::run_loading(
            &mut self.directory_manager,
            resource_package_info,
        )
    }

    pub fn load_resource(
        &mut self,
        resource: &gfc::Resource,
    ) -> Result<gfc::ResourceData, Error> {
        gfc::ResourceCache::load_resource(&gfc::ResourceLoadInfo {
            name: &resource.name,
            ext: &resource.ext,
            buffers: &resource.data,
        })
    }
}