Files
pmomusic/pmoupnp/src/value_ranges/methods.rs

70 lines
1.9 KiB
Rust

use std::cmp::Ordering;
use crate::{
value_ranges::ValueRange,
variable_types::{StateValue, StateValueError, StateVarType, UpnpVarType},
};
impl UpnpVarType for ValueRange {
fn as_state_var_type(&self) -> StateVarType {
self.min.as_state_var_type() // utilise ton From<&StateValue> existant
}
}
impl ValueRange {
pub fn new(min: &StateValue, max: &StateValue) -> Result<Self, StateValueError> {
if min.as_state_var_type() != max.as_state_var_type() {
return Err(StateValueError::TypeError(
"min and max do not belong the same time".to_string(),
));
}
// Vérifier que min <= max
if let Some(cmp) = min.partial_cmp(max) {
if cmp == Ordering::Greater {
return Err(StateValueError::RangeError(
"Minimum cannot be greater than maximum".to_string(),
));
}
}
Ok(Self {
min: min.clone(),
max: max.clone(),
})
}
pub fn get_minimum(self: &ValueRange) -> StateValue {
return self.min.clone();
}
pub fn set_minimum(&mut self, value: &StateValue) {
self.min = value.clone()
}
pub fn get_maximum(self: &ValueRange) -> StateValue {
return self.max.clone();
}
pub fn set_maximum(&mut self, value: &StateValue) {
self.max = value.clone()
}
pub fn is_in_range(&self, value: &StateValue) -> bool {
if self.as_state_var_type() == value.as_state_var_type()
&& let Some(cmp) = self.min.partial_cmp(value)
{
if cmp == Ordering::Greater {
return false;
}
if let Some(cmp2) = self.max.partial_cmp(value) {
if cmp2 == Ordering::Less {
return false;
}
return true;
}
}
return false;
}
}