hayro_syntax/object/
rect.rs

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