hayro_syntax/object/
rect.rs

1//! Rectangles.
2
3use crate::object::array::Array;
4use crate::object::{Object, ObjectLike};
5use crate::reader::{Readable, Reader};
6use crate::xref::XRef;
7
8pub use kurbo::Rect;
9
10impl Readable<'_> for Rect {
11    fn read<const PLAIN: bool>(r: &mut Reader<'_>, _: &XRef) -> Option<Self> {
12        let arr = r.read_without_xref::<Array>()?;
13        from_arr(&arr)
14    }
15}
16
17fn from_arr(array: &Array) -> Option<Rect> {
18    let mut iter = array.iter::<f32>();
19
20    Some(Rect::new(
21        iter.next()? as f64,
22        iter.next()? as f64,
23        iter.next()? as f64,
24        iter.next()? as f64,
25    ))
26}
27
28impl TryFrom<Object<'_>> for Rect {
29    type Error = ();
30
31    fn try_from(value: Object<'_>) -> Result<Self, Self::Error> {
32        match value {
33            Object::Array(arr) => from_arr(&arr).ok_or(()),
34            _ => Err(()),
35        }
36    }
37}
38
39impl ObjectLike<'_> for Rect {}