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