mirror of
https://github.com/bybrooklyn/openbitdo.git
synced 2026-03-19 12:12:57 -04:00
39 lines
1.0 KiB
Rust
39 lines
1.0 KiB
Rust
use crate::ReportSaveMode;
|
|
use anyhow::{anyhow, Result};
|
|
use serde::{Deserialize, Serialize};
|
|
use std::path::Path;
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
struct PersistedSettings {
|
|
#[serde(default = "default_settings_schema_version")]
|
|
schema_version: u32,
|
|
#[serde(default)]
|
|
advanced_mode: bool,
|
|
#[serde(default)]
|
|
report_save_mode: ReportSaveMode,
|
|
}
|
|
|
|
const fn default_settings_schema_version() -> u32 {
|
|
1
|
|
}
|
|
|
|
/// Persist beginner/advanced preferences in a small TOML config file.
|
|
pub(crate) fn persist_user_settings(
|
|
path: &Path,
|
|
advanced_mode: bool,
|
|
report_save_mode: ReportSaveMode,
|
|
) -> Result<()> {
|
|
if let Some(parent) = path.parent() {
|
|
std::fs::create_dir_all(parent)?;
|
|
}
|
|
|
|
let body = toml::to_string_pretty(&PersistedSettings {
|
|
schema_version: default_settings_schema_version(),
|
|
advanced_mode,
|
|
report_save_mode,
|
|
})
|
|
.map_err(|err| anyhow!("failed to serialize user settings: {err}"))?;
|
|
std::fs::write(path, body)?;
|
|
Ok(())
|
|
}
|