syn_args/macro_args/def/
float.rs1use 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}