Add AppConfig with overwrite behavior, skill level, thread count settings

All 3 config tests passing.
This commit is contained in:
2026-03-06 01:43:22 +02:00
parent e7142604d4
commit d630d2fb3d
2 changed files with 97 additions and 1 deletions

View File

@@ -1 +1,70 @@
// Application configuration use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AppConfig {
pub output_subfolder: String,
pub output_fixed_path: Option<String>,
pub overwrite_behavior: OverwriteBehavior,
pub remember_settings: bool,
pub skill_level: SkillLevel,
pub thread_count: ThreadCount,
pub error_behavior: ErrorBehavior,
pub notify_on_completion: bool,
pub play_completion_sound: bool,
pub auto_open_output: bool,
pub high_contrast: bool,
pub large_text: bool,
pub reduced_motion: bool,
}
impl Default for AppConfig {
fn default() -> Self {
Self {
output_subfolder: "processed".into(),
output_fixed_path: None,
overwrite_behavior: OverwriteBehavior::Ask,
remember_settings: true,
skill_level: SkillLevel::Simple,
thread_count: ThreadCount::Auto,
error_behavior: ErrorBehavior::SkipAndContinue,
notify_on_completion: true,
play_completion_sound: false,
auto_open_output: false,
high_contrast: false,
large_text: false,
reduced_motion: false,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum OverwriteBehavior {
Ask,
AutoRename,
Overwrite,
Skip,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SkillLevel {
Simple,
Detailed,
}
impl SkillLevel {
pub fn is_advanced(&self) -> bool {
matches!(self, Self::Detailed)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreadCount {
Auto,
Manual(usize),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ErrorBehavior {
SkipAndContinue,
PauseOnError,
}

View File

@@ -0,0 +1,27 @@
use pixstrip_core::config::*;
#[test]
fn default_config() {
let config = AppConfig::default();
assert_eq!(config.output_subfolder, "processed");
assert_eq!(config.overwrite_behavior, OverwriteBehavior::Ask);
assert!(config.remember_settings);
assert_eq!(config.skill_level, SkillLevel::Simple);
assert_eq!(config.thread_count, ThreadCount::Auto);
assert_eq!(config.error_behavior, ErrorBehavior::SkipAndContinue);
}
#[test]
fn config_serialization_roundtrip() {
let config = AppConfig::default();
let json = serde_json::to_string(&config).unwrap();
let deserialized: AppConfig = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized.output_subfolder, config.output_subfolder);
assert_eq!(deserialized.overwrite_behavior, config.overwrite_behavior);
}
#[test]
fn skill_level_toggle() {
assert_eq!(SkillLevel::Simple.is_advanced(), false);
assert_eq!(SkillLevel::Detailed.is_advanced(), true);
}