onenote_parser/one/property/
ink_dimensions.rs1use crate::errors::{ErrorKind, Result};
2use crate::one::property::PropertyType;
3use crate::onestore::object::Object;
4use crate::reader::Reader;
5use crate::shared::guid::Guid;
6
7#[allow(dead_code)]
9pub(crate) struct InkDimension {
10 pub(crate) id: Guid,
11 pub(crate) limit_lower: i32,
12 pub(crate) limit_upper: i32,
13}
14
15impl InkDimension {
16 pub(crate) fn parse(prop_type: PropertyType, object: &Object) -> Result<Vec<InkDimension>> {
17 let data = match object.props().get(prop_type) {
18 Some(value) => value.to_vec().ok_or_else(|| {
19 ErrorKind::MalformedOneNoteFileData("ink dimensions is not a vec".into())
20 })?,
21 None => return Ok(Vec::new()),
22 };
23
24 data.chunks_exact(32)
25 .map(InkDimension::parse_entry)
26 .collect::<Result<Vec<_>>>()
27 }
28
29 fn parse_entry(data: &[u8]) -> Result<InkDimension> {
30 let mut reader = Reader::new(data);
31 let id = Guid::parse(&mut reader)?;
32 let limit_lower = reader.get_u32()? as i32;
33 let limit_upper = reader.get_u32()? as i32;
34
35 Ok(InkDimension {
36 id,
37 limit_lower,
38 limit_upper,
39 })
40 }
41}