Skip to main content

modde_games/generic/
mod.rs

1use std::path::{Path, PathBuf};
2
3use crate::traits::GamePlugin;
4
5/// A generic game with loose file drop support.
6pub struct GenericGame {
7    id: String,
8    name: String,
9    install_path: Option<PathBuf>,
10    mod_dir: String,
11}
12
13impl GenericGame {
14    pub fn new(
15        id: impl Into<String>,
16        name: impl Into<String>,
17        install_path: Option<PathBuf>,
18        mod_dir: impl Into<String>,
19    ) -> Self {
20        Self {
21            id: id.into(),
22            name: name.into(),
23            install_path,
24            mod_dir: mod_dir.into(),
25        }
26    }
27}
28
29impl GamePlugin for GenericGame {
30    fn game_id(&self) -> &str {
31        &self.id
32    }
33
34    fn display_name(&self) -> &str {
35        &self.name
36    }
37
38    fn detect_install(&self) -> Option<PathBuf> {
39        self.install_path.clone().filter(|p| p.exists())
40    }
41
42    fn mod_directory(&self, install: &Path) -> PathBuf {
43        install.join(&self.mod_dir)
44    }
45
46}