onenote_parser/onenote/
page_series.rs1use crate::errors::{ErrorKind, Result};
2use crate::fsshttpb::data::exguid::ExGuid;
3use crate::one::property_set::page_series_node;
4use crate::onenote::page::{parse_page, Page};
5use crate::onestore::OneStore;
6
7#[derive(Clone, Debug)]
14pub struct PageSeries {
15 pages: Vec<Page>,
16}
17
18impl PageSeries {
19 pub fn pages(&self) -> &[Page] {
21 &self.pages
22 }
23}
24
25pub(crate) fn parse_page_series(id: ExGuid, store: &OneStore) -> Result<PageSeries> {
26 let object = store
27 .data_root()
28 .get_object(id)
29 .ok_or_else(|| ErrorKind::MalformedOneNoteData("page series object is missing".into()))?;
30 let data = page_series_node::parse(object)?;
31
32 let pages = data
33 .page_spaces
34 .into_iter()
35 .map(|page_space_id| {
36 store
37 .object_space(page_space_id)
38 .ok_or_else(|| ErrorKind::MalformedOneNoteData("page space is missing".into()))
39 })
40 .map(|page_space| parse_page(page_space?))
41 .collect::<Result<_>>()?;
42
43 Ok(PageSeries { pages })
44}