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 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 {}