use lib0::any::Any; use std::collections::HashMap; pub type DynamicValueMap = HashMap; pub struct DynamicValue { any: Any, } impl DynamicValue { pub fn new(any: Any) -> Self { Self { any } } pub fn as_bool(&self) -> Option { match self.any { Any::Bool(value) => Some(value), _ => None, } } pub fn as_number(&self) -> Option { match self.any { Any::Number(value) => Some(value), _ => None, } } pub fn as_int(&self) -> Option { match self.any { Any::BigInt(value) => Some(value), _ => None, } } pub fn as_string(&self) -> Option { match &self.any { Any::String(value) => Some(value.to_string()), _ => None, } } pub fn as_buffer(&self) -> Option> { match &self.any { Any::Buffer(value) => Some(value.to_vec()), _ => None, } } pub fn as_array(&self) -> Option> { match &self.any { Any::Array(value) => Some(value.iter().map(|a| DynamicValue::new(a.clone())).collect()), _ => None, } } pub fn as_map(&self) -> Option> { match &self.any { Any::Map(value) => Some( value .iter() .map(|(key, value)| (key.clone(), DynamicValue::new(value.clone()))) .collect(), ), _ => None, } } }