#[cfg(feature = "serde")]
use serde::Serialize;
use crate::raw::drawing::line::head_end::XlsxHeadEnd;
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, PartialEq, Clone)]
pub struct LineEnd {
pub r#type: LineEndTypeValue,
pub width: LineEndWidthValue,
pub length: LineEndLengthValue,
}
impl LineEnd {
pub(crate) fn default() -> Self {
return Self {
r#type: LineEndTypeValue::default(),
width: LineEndWidthValue::default(),
length: LineEndLengthValue::default(),
};
}
pub(crate) fn from_raw(raw: Option<XlsxHeadEnd>, reference: Option<Self>) -> Self {
let Some(raw) = raw else {
return reference.unwrap_or(Self::default());
};
return Self {
r#type: LineEndTypeValue::from_string(raw.clone().r#type),
width: LineEndWidthValue::from_string(raw.clone().w),
length: LineEndLengthValue::from_string(raw.clone().len),
};
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum LineEndTypeValue {
Arrow,
Diamond,
None,
Oval,
Stealth,
Triangle,
}
impl LineEndTypeValue {
pub(crate) fn default() -> Self {
Self::None
}
pub(crate) fn from_string(s: Option<String>) -> Self {
let Some(s) = s else { return Self::default() };
return match s.as_ref() {
"arrow" => Self::Arrow,
"diamond" => Self::Diamond,
"none" => Self::None,
"oval" => Self::Oval,
"stealth" => Self::Stealth,
"triangle" => Self::Triangle,
_ => Self::default(),
};
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum LineEndLengthValue {
Large,
Medium,
Small,
}
impl LineEndLengthValue {
pub(crate) fn default() -> Self {
Self::Medium
}
pub(crate) fn from_string(s: Option<String>) -> Self {
let Some(s) = s else { return Self::default() };
return match s.as_ref() {
"lg" => Self::Large,
"med" => Self::Medium,
"sm" => Self::Small,
_ => Self::default(),
};
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum LineEndWidthValue {
Large,
Medium,
Small,
}
impl LineEndWidthValue {
pub(crate) fn default() -> Self {
Self::Medium
}
pub(crate) fn from_string(s: Option<String>) -> Self {
let Some(s) = s else { return Self::default() };
return match s.as_ref() {
"lg" => Self::Large,
"med" => Self::Medium,
"sm" => Self::Small,
_ => Self::default(),
};
}
}