diff --git a/src/params.rs b/src/params.rs index 9f5275c2..2fe3c84c 100644 --- a/src/params.rs +++ b/src/params.rs @@ -29,7 +29,9 @@ pub enum Range { Linear { min: T, max: T }, } -trait Normalize { +/// A normalizable range for type `T`, where `self` is expected to be a type `R`. Higher kinded +/// types would have made this trait definition a lot clearer. +trait NormalizebleRange { /// Normalize an unnormalized value. Will be clamped to the bounds of the range if the /// normalized value exceeds `[0, 1]`. fn normalize(&self, unnormalized: T) -> f32; @@ -58,7 +60,7 @@ pub struct PlainParam { pub string_to_value: Option T>>, } -impl Normalize for Range { +impl NormalizebleRange for Range { fn normalize(&self, unnormalized: f32) -> f32 { match &self { Range::Linear { min, max } => (unnormalized - min) / (max - min), @@ -72,7 +74,7 @@ impl Normalize for Range { } } -impl Normalize for Range { +impl NormalizebleRange for Range { fn normalize(&self, unnormalized: i32) -> f32 { match &self { Range::Linear { min, max } => (unnormalized - min) as f32 / (max - min) as f32, @@ -125,12 +127,3 @@ mod tests { assert_eq!(range.unnormalize(0.75), 5); } } - -fn foo(param: &Param) -> f32 { - match param { - Param::FloatParam(p) => p - .range - .normalize(p.value.load(std::sync::atomic::Ordering::Relaxed)), - Param::IntParam(_) => todo!(), - } -}