summaryrefslogtreecommitdiffstats
path: root/src/launcher/profile.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/launcher/profile.rs')
-rw-r--r--src/launcher/profile.rs37
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