#[cfg(feature = "serde")]
use serde::Serialize;
use crate::{
processed::drawing::text::shape_text_rectangle::ShapeTextRectangle,
raw::drawing::shape::custom_geometry::XlsxCustomGeometry,
};
use super::{
adjust_handle_type::AdjustHandleTypeValues, connection_site::ConnectionSite, path::Path,
};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize))]
pub struct CustomGeometry {
pub paths: Vec<Path>,
pub text_rectangle: ShapeTextRectangle,
pub adjust_handles: Vec<AdjustHandleTypeValues>,
pub connection_sites: Vec<ConnectionSite>,
}
impl CustomGeometry {
pub(crate) fn from_raw(raw: XlsxCustomGeometry) -> Self {
let adv_list = raw.adjust_value_list.unwrap_or(vec![]);
let sp_guide_list = raw.shape_guide_list.unwrap_or(vec![]);
let guide_list = Some([&adv_list[..], &sp_guide_list[..]].concat());
let paths: Vec<Path> = raw
.path_list
.unwrap_or(vec![])
.into_iter()
.map(|raw_path| Path::from_raw(raw_path, guide_list.clone()))
.collect();
let adjust_handles: Vec<AdjustHandleTypeValues> = raw
.adjust_handle_list
.unwrap_or(vec![])
.into_iter()
.map(|raw_handle| AdjustHandleTypeValues::from_raw(raw_handle, guide_list.clone()))
.collect();
let connection_sites: Vec<ConnectionSite> = raw
.connection_site_list
.unwrap_or(vec![])
.into_iter()
.map(|raw_cnx| ConnectionSite::from_raw(raw_cnx, guide_list.clone()))
.collect();
return Self {
paths,
text_rectangle: ShapeTextRectangle::from_raw(raw.text_rectangle, guide_list.clone()),
adjust_handles,
connection_sites,
};
}
}