syn_args/macro_args/def/
float.rs

1use super::*;
2
3#[derive(Debug, PartialEq, Clone)]
4pub struct Float(pub f32);
5
6impl TryFrom<&Value> for Float {
7    type Error = Error;
8
9    fn try_from(value: &Value) -> Result<Self, Self::Error> {
10        match value {
11            Value::Float(v) => Ok(v.clone()),
12            _ => Err(Error::new(proc_macro2::Span::call_site(), "Expected Expr")),
13        }
14    }
15}
16
17impl Deref for Float {
18    type Target = f32;
19
20    fn deref(&self) -> &Self::Target {
21        &self.0
22    }
23}
24
25impl DerefMut for Float {
26    fn deref_mut(&mut self) -> &mut Self::Target {
27        &mut self.0
28    }
29}
30
31impl TryFrom<Transform<'_>> for def::Float {
32    type Error = Error;
33
34    fn try_from(value: Transform<'_>) -> Result<Self, Self::Error> {
35        if let Value::Object(obj) = value.value {
36            if let Some(Value::Float(v)) = obj.get(value.key) {
37                return Ok(v.clone());
38            }
39        } else if let Value::Array(v) = value.value {
40            let index = value.key.parse::<usize>().map_err(|_| Error::new(proc_macro2::Span::call_site(), "Expected usize"))?;
41            if let Some(Value::Float(v)) = v.get(index) {
42                return Ok(v.clone());
43            }
44        }
45
46        Err(Error::new(proc_macro2::Span::call_site(), "TryFrom<Transform<'_>> for def::Float"))
47    }
48}