use alloc::collections::BTreeMap;
use alloc::string::String;
use alloc::vec::Vec;
#[non_exhaustive]
#[derive(Clone, Debug, PartialEq)]
pub enum ParamValue {
None,
F32(f32),
I32(i32),
U32(u32),
Bool(bool),
Str(String),
Enum(String),
F32Array(Vec<f32>),
Color([f32; 4]),
Json(String),
}
impl ParamValue {
pub fn is_none(&self) -> bool {
matches!(self, Self::None)
}
pub fn is_some(&self) -> bool {
!self.is_none()
}
pub fn as_f32(&self) -> Option<f32> {
match self {
Self::F32(v) => Some(*v),
Self::I32(v) => Some(*v as f32),
Self::U32(v) => Some(*v as f32),
_ => None,
}
}
pub fn as_i32(&self) -> Option<i32> {
match self {
Self::I32(v) => Some(*v),
Self::F32(v) => Some(*v as i32),
Self::U32(v) => i32::try_from(*v).ok(),
_ => None,
}
}
pub fn as_u32(&self) -> Option<u32> {
match self {
Self::U32(v) => Some(*v),
Self::I32(v) => u32::try_from(*v).ok(),
Self::F32(v) => Some(*v as u32),
_ => None,
}
}
pub fn as_bool(&self) -> Option<bool> {
match self {
Self::Bool(v) => Some(*v),
_ => None,
}
}
pub fn as_str(&self) -> Option<&str> {
match self {
Self::Str(v) | Self::Enum(v) => Some(v),
_ => None,
}
}
pub fn as_f32_array(&self) -> Option<&[f32]> {
match self {
Self::F32Array(v) => Some(v),
_ => None,
}
}
pub fn as_color(&self) -> Option<[f32; 4]> {
match self {
Self::Color(v) => Some(*v),
_ => None,
}
}
pub fn as_json_str(&self) -> Option<&str> {
match self {
Self::Json(v) => Some(v),
_ => None,
}
}
}
pub type ParamMap = BTreeMap<String, ParamValue>;