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
use crate::error::{CobbleError, CobbleResult};
use crate::instance::Instance;
use crate::minecraft::models::version_data::VersionData;
use crate::minecraft::models::version_manifest::VersionManifest;
use crate::utils::download::download_file_check;
use std::fs;

impl Instance {
    /// Saves the version data JSON to disk.
    pub fn save_version_data(&self) -> CobbleResult<()> {
        let manifest = VersionManifest::get()?;

        // Figure out version
        let version_summary = manifest
            .versions
            .get(&self.version)
            .ok_or_else(|| CobbleError::InvalidVersion(self.version.clone()))?;

        // Save version data
        let version_data_path = self.version_data_path();
        download_file_check(&version_summary.url, &version_data_path, None)?;

        Ok(())
    }

    /// Read the version data JSON from disk.
    /// This does not download the index if it does not exist.
    pub fn read_version_data(&self) -> CobbleResult<VersionData> {
        let version_data_path = self.version_data_path();

        let version_data_file = fs::File::open(version_data_path)?;
        let version_data = serde_json::from_reader::<_, VersionData>(version_data_file)?;

        Ok(version_data)
    }
}