hayro_syntax/object/
rect.rs1use 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 {}