diff options
Diffstat (limited to 'src/launcher/profile.rs')
| -rw-r--r-- | src/launcher/profile.rs | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/src/launcher/profile.rs b/src/launcher/profile.rs index 835d912..104faef 100644 --- a/src/launcher/profile.rs +++ b/src/launcher/profile.rs @@ -1,8 +1,33 @@ -use super::instance::Instance; +use std::path::{Path, PathBuf}; +use serde::{Deserialize, Serialize}; -struct Profile<'l> { - name: String, - version_id: String, - java_runtime: Option<String>, - instance: &'l Instance +#[derive(Deserialize, Serialize, Debug, Clone)] +pub struct Instance { + pub name: String, + pub path: Option<PathBuf> // relative to launcher home (or absolute) +} + +#[derive(Deserialize, Serialize, Debug, Clone)] +pub struct Profile { + pub version_id: String, + pub java_runtime: Option<String>, + pub instance: String // ugly that this is a string instead of reference to an Instance but whatever I'm lazy +} + +impl Instance { + fn instance_dir(home: impl AsRef<Path>, name: impl AsRef<Path>) -> PathBuf { + let mut out = home.as_ref().join("instances"); + out.push(name); + out + } + + pub fn get_path(&self, home: impl AsRef<Path>) -> PathBuf { + self.path.as_ref().map(|p| { + if p.is_relative() { + Self::instance_dir(home.as_ref(), p) + } else { + p.to_owned() + } + }).unwrap_or_else(|| Self::instance_dir(home, &self.name)) + } }
\ No newline at end of file |
