Skip to main content

modde_games/bg3/
saves.rs

1//! Save detection for Baldur's Gate 3.
2
3use std::path::Path;
4
5use anyhow::Result;
6use smallvec::SmallVec;
7
8use crate::save_patterns::{CaptureSummary, PatternSaveTracker};
9use crate::traits::{DetectedSave, SaveTracker};
10
11/// [`SaveTracker`] for Baldur's Gate 3 save directories.
12pub struct Bg3SaveTracker;
13
14pub static BG3_SAVE_TRACKER: Bg3SaveTracker = Bg3SaveTracker;
15
16const TRACKER: PatternSaveTracker = PatternSaveTracker {
17    prefix_rules: &[],
18    file_extensions: &["lsv"],
19    default_category: "manual",
20    recursive: true,
21    exclude_patterns: &[],
22    label_extractor: |_, rel| Some(rel.to_string()),
23    summary: CaptureSummary::ByCategory,
24};
25
26impl SaveTracker for Bg3SaveTracker {
27    fn save_patterns(&self) -> SmallVec<[String; 2]> {
28        TRACKER.save_patterns()
29    }
30
31    fn detect_saves(&self, save_dir: &Path) -> Result<Vec<DetectedSave>> {
32        TRACKER.detect_saves(save_dir)
33    }
34
35    fn exclude_patterns(&self) -> SmallVec<[String; 2]> {
36        TRACKER.exclude_patterns()
37    }
38
39    fn describe_capture(&self, saves: &[DetectedSave]) -> String {
40        TRACKER.describe_capture(saves)
41    }
42}