modde_games/stardew/
scanner.rs1use anyhow::Result;
4
5use crate::scanner_patterns::DirectoryModRule;
6use crate::traits::{DiscoveredMod, ModScanner, ScanContext};
7
8pub struct StardewScanner;
10
11pub static STARDEW_SCANNER: StardewScanner = StardewScanner;
12
13impl ModScanner for StardewScanner {
14 fn scan_directories(&self) -> &[&str] {
15 &["Mods"]
16 }
17
18 fn scan_filesystem(&self, ctx: &ScanContext<'_>) -> Result<Vec<DiscoveredMod>> {
19 let mut out = Vec::new();
20 DirectoryModRule {
21 rel_dir: "Mods",
22 mod_id_prefix: "smapi",
23 source_location: "Mods",
24 confidence: 0.75,
25 marker_file: Some("manifest.json"),
26 marker_confidence: Some(0.98),
27 }
28 .scan(ctx.install_dir, &mut out)?;
29 Ok(out)
30 }
31
32 fn mod_id_footprint(&self, mod_id: &str) -> Option<modde_core::scanner::ModFootprint> {
33 let name = mod_id.strip_prefix("smapi/")?.to_lowercase();
34 Some(modde_core::scanner::ModFootprint::Directory(format!(
35 "mods/{name}/"
36 )))
37 }
38}