diff --git a/src/param/boolean.rs b/src/param/boolean.rs index 76a33797..c4184b77 100644 --- a/src/param/boolean.rs +++ b/src/param/boolean.rs @@ -95,6 +95,7 @@ impl Param for BoolParam { } fn string_to_normalized_value(&self, string: &str) -> Option { + let string = string.trim(); let value = match &self.string_to_value { Some(f) => f(string), None => Some(string.eq_ignore_ascii_case("true") || string.eq_ignore_ascii_case("on")), @@ -116,6 +117,7 @@ impl Param for BoolParam { } fn set_from_string(&mut self, string: &str) -> bool { + let string = string.trim(); let value = match &self.string_to_value { Some(f) => f(string), None => Some(string.eq_ignore_ascii_case("true") || string.eq_ignore_ascii_case("on")), diff --git a/src/param/enums.rs b/src/param/enums.rs index d673c4f0..15160bde 100644 --- a/src/param/enums.rs +++ b/src/param/enums.rs @@ -200,9 +200,10 @@ impl Param for EnumParamInner { } fn string_to_normalized_value(&self, string: &str) -> Option { + let string = string.trim(); self.variants .iter() - .position(|n| n == &string) + .position(|variant| variant == &string) .map(|idx| self.preview_normalized(idx as i32)) } @@ -215,7 +216,8 @@ impl Param for EnumParamInner { } fn set_from_string(&mut self, string: &str) -> bool { - match self.variants.iter().position(|n| n == &string) { + let string = string.trim(); + match self.variants.iter().position(|variant| variant == &string) { Some(idx) => { self.inner.set_plain_value(idx as i32); true diff --git a/src/param/float.rs b/src/param/float.rs index 1e51db3c..f69fae9e 100644 --- a/src/param/float.rs +++ b/src/param/float.rs @@ -146,9 +146,9 @@ impl Param for FloatParam { fn string_to_normalized_value(&self, string: &str) -> Option { let value = match &self.string_to_value { - Some(f) => f(string), - // TODO: Check how Rust's parse function handles trailing garbage - None => string.parse().ok(), + Some(f) => f(string.trim()), + // In the CLAP wrapper the unit will be included, so make sure to handle that + None => string.trim().trim_end_matches(self.unit).parse().ok(), }?; Some(self.preview_normalized(value)) @@ -168,9 +168,9 @@ impl Param for FloatParam { fn set_from_string(&mut self, string: &str) -> bool { let value = match &self.string_to_value { - Some(f) => f(string), - // TODO: Check how Rust's parse function handles trailing garbage - None => string.parse().ok(), + Some(f) => f(string.trim()), + // In the CLAP wrapper the unit will be included, so make sure to handle that + None => string.trim().trim_end_matches(self.unit).parse().ok(), }; match value { diff --git a/src/param/integer.rs b/src/param/integer.rs index d4570f4e..826ac4e4 100644 --- a/src/param/integer.rs +++ b/src/param/integer.rs @@ -129,9 +129,9 @@ impl Param for IntParam { fn string_to_normalized_value(&self, string: &str) -> Option { let value = match &self.string_to_value { - Some(f) => f(string), - // TODO: Check how Rust's parse function handles trailing garbage - None => string.parse().ok(), + Some(f) => f(string.trim()), + // In the CLAP wrapper the unit will be included, so make sure to handle that + None => string.trim().trim_end_matches(self.unit).parse().ok(), }?; Some(self.preview_normalized(value)) @@ -147,9 +147,9 @@ impl Param for IntParam { fn set_from_string(&mut self, string: &str) -> bool { let value = match &self.string_to_value { - Some(f) => f(string), - // TODO: Check how Rust's parse function handles trailing garbage - None => string.parse().ok(), + Some(f) => f(string.trim()), + // In the CLAP wrapper the unit will be included, so make sure to handle that + None => string.trim().trim_end_matches(self.unit).parse().ok(), }; match value {