Skip to main content

orbtk_utils/
value.rs

1use serde::de::DeserializeOwned;
2/// Wraps a ron value and is used to support conversion to different types.
3pub struct Value(pub ron::Value);
4
5impl Value {
6    /// Converts the internal value to the given type.
7    pub fn get<T>(self) -> T
8    where
9        T: Default + DeserializeOwned,
10    {
11        if let Ok(value) = self.0.into_rust::<T>() {
12            return value;
13        }
14
15        T::default()
16    }
17}
18
19impl From<ron::Value> for Value {
20    fn from(v: ron::Value) -> Self {
21        Value(v)
22    }
23}
24
25impl From<Value> for String {
26    fn from(v: Value) -> String {
27        v.get::<String>()
28    }
29}
30
31impl From<Value> for f64 {
32    fn from(v: Value) -> f64 {
33        v.get::<f64>()
34    }
35}
36
37impl From<Value> for f32 {
38    fn from(v: Value) -> f32 {
39        v.get::<f32>()
40    }
41}