modde-games 0.2.1

Game plugin implementations for modde
Documentation
//! Save detection for Oblivion Remastered.

use std::path::Path;

use anyhow::Result;
use smallvec::SmallVec;

use crate::save_patterns::{CaptureSummary, PatternSaveTracker};
use crate::traits::{DetectedSave, SaveTracker};

/// [`SaveTracker`] for Oblivion Remastered save directories.
pub struct OblivionRemasteredSaveTracker;

pub static OBLIVION_REMASTERED_SAVE_TRACKER: OblivionRemasteredSaveTracker =
    OblivionRemasteredSaveTracker;

const TRACKER: PatternSaveTracker = PatternSaveTracker {
    prefix_rules: &[],
    file_extensions: &["ess", "sav"],
    default_category: "manual",
    recursive: false,
    exclude_patterns: &["*.bak"],
    label_extractor: |_, rel| Some(rel.to_string()),
    summary: CaptureSummary::ByCategory,
};

impl SaveTracker for OblivionRemasteredSaveTracker {
    fn save_patterns(&self) -> SmallVec<[String; 2]> {
        TRACKER.save_patterns()
    }

    fn detect_saves(&self, save_dir: &Path) -> Result<Vec<DetectedSave>> {
        TRACKER.detect_saves(save_dir)
    }

    fn exclude_patterns(&self) -> SmallVec<[String; 2]> {
        TRACKER.exclude_patterns()
    }

    fn describe_capture(&self, saves: &[DetectedSave]) -> String {
        TRACKER.describe_capture(saves)
    }
}