use crate::errors::Result;
use crate::fsshttpb::data::exguid::ExGuid;
use crate::one::property::object_reference::ObjectReference;
use crate::one::property::{PropertyType, simple};
use crate::one::property_set::{PropertySetId, assert_property_set};
use crate::onestore::object::Object;
use crate::property::common::Color;
#[derive(Debug)]
#[allow(dead_code)]
pub(crate) struct Data {
pub(crate) children: Vec<ExGuid>,
pub(crate) filename: Option<String>,
pub(crate) ordering_id: Option<u32>,
pub(crate) color: Option<Color>,
}
pub(crate) fn parse(object: &Object) -> Result<Data> {
assert_property_set(object, PropertySetId::TocContainer)?;
let children =
ObjectReference::parse_vec(PropertyType::TocChildren, object)?.unwrap_or_default();
let filename = simple::parse_string(PropertyType::FolderChildFilename, object)?
.map(|s| s.replace("^M", "+"))
.map(|s| s.replace("^J", ","));
let ordering_id = simple::parse_u32(PropertyType::NotebookElementOrderingId, object)?;
let color = Color::parse(PropertyType::SectionColor, object)?;
Ok(Data {
children,
filename,
ordering_id,
color,
})
}