Skip to content

Commit

Permalink
Merge pull request #25 from plule/improve-serde
Browse files Browse the repository at this point in the history
Improve settings robustness
  • Loading branch information
plule authored Nov 14, 2022
2 parents 515c4b1 + 49f285d commit 62c1ab3
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
11 changes: 8 additions & 3 deletions src/settings/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ pub type Settings = v1::Settings;
pub type Preset = v1::Preset;

#[derive(Clone, Serialize, Deserialize, PartialEq)]
#[serde(deny_unknown_fields)]
enum Version {
V1(v1::Settings),
}
Expand Down Expand Up @@ -63,6 +64,7 @@ impl Settings {
#[cfg(test)]
mod tests {
use rstest::rstest;
use staff::midi::MidiNote;

use super::*;

Expand All @@ -73,9 +75,12 @@ mod tests {
assert_eq!("Current", settings.current_preset.name);
assert_eq!(1, settings.presets.len());
assert_eq!(
Some(staff::midi::MidiNote::from_byte(50)),
settings.presets[0].drone.notes[0]
Some(MidiNote::from_byte(50)),
settings.current_preset.drone.notes[0]
);
assert_eq!(None, settings.presets[0].drone.notes[1]);
assert_eq!(None, settings.current_preset.drone.notes[1]);
assert_eq!(0.1, settings.current_preset.mix.drone);
assert_eq!(0.9, settings.current_preset.fx.echo.mix);
assert_eq!(0.8, settings.current_preset.fx.reverb.mix);
}
}
18 changes: 18 additions & 0 deletions src/settings/v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use staff::{

/// Application settings
#[derive(Clone, Serialize, Deserialize, PartialEq, Default)]
#[serde(deny_unknown_fields)]
pub struct Settings {
/// Current sound settings
#[serde(default)]
Expand All @@ -21,6 +22,7 @@ pub struct Settings {

/// Sound preset
#[derive(Clone, Serialize, Deserialize, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct Preset {
/// Name of the preset
pub name: String,
Expand Down Expand Up @@ -52,14 +54,20 @@ pub struct Preset {
}

#[derive(Clone, Serialize, Deserialize, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct MixSettings {
#[serde(default)]
pub master: f32,
#[serde(default)]
pub lead: f32,
#[serde(default)]
pub guitar: f32,
#[serde(default)]
pub drone: f32,
}

#[derive(Clone, Serialize, Deserialize, PartialEq, Default)]
#[serde(deny_unknown_fields)]
pub struct FxSettings {
#[serde(default)]
pub echo: EchoSettings,
Expand All @@ -68,21 +76,31 @@ pub struct FxSettings {
}

#[derive(Clone, Serialize, Deserialize, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct EchoSettings {
#[serde(default)]
pub mix: f32,
#[serde(default)]
pub duration: f32,
#[serde(default)]
pub feedback: f32,
}

#[derive(Clone, Serialize, Deserialize, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct ReverbSettings {
#[serde(default)]
pub mix: f32,
#[serde(default)]
pub time: f32,
#[serde(default)]
pub damp: f32,
#[serde(default)]
pub size: f32,
}

#[derive(Clone, Serialize, Deserialize, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct DroneSettings {
pub notes: [Option<MidiNote>; 4],
pub detune: f32,
Expand Down
6 changes: 3 additions & 3 deletions src/settings/v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ current_preset:
master: 1.0
lead: 1.0
guitar: 1.0
drone: 0.4
drone: 0.1
fx:
echo:
mix: 1.0
mix: 0.9
duration: 0.3
feedback: 0.46
reverb:
mix: 0.27
mix: 0.8
time: 13.500001
damp: 0.88
size: 5.0
Expand Down

0 comments on commit 62c1ab3

Please sign in to comment.