use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename = "x14:sparklineGroup")]
pub struct SparklineGroup {
#[serde(rename = "@type", skip_serializing_if = "Option::is_none")]
pub sparkline_type: Option<String>,
#[serde(rename = "@markers", skip_serializing_if = "Option::is_none")]
pub markers: Option<bool>,
#[serde(rename = "@high", skip_serializing_if = "Option::is_none")]
pub high: Option<bool>,
#[serde(rename = "@low", skip_serializing_if = "Option::is_none")]
pub low: Option<bool>,
#[serde(rename = "@first", skip_serializing_if = "Option::is_none")]
pub first: Option<bool>,
#[serde(rename = "@last", skip_serializing_if = "Option::is_none")]
pub last: Option<bool>,
#[serde(rename = "@negative", skip_serializing_if = "Option::is_none")]
pub negative: Option<bool>,
#[serde(rename = "@displayXAxis", skip_serializing_if = "Option::is_none")]
pub display_x_axis: Option<bool>,
#[serde(rename = "@lineWeight", skip_serializing_if = "Option::is_none")]
pub line_weight: Option<f64>,
#[serde(rename = "@minAxisType", skip_serializing_if = "Option::is_none")]
pub min_axis_type: Option<String>,
#[serde(rename = "@maxAxisType", skip_serializing_if = "Option::is_none")]
pub max_axis_type: Option<String>,
#[serde(rename = "x14:sparklines")]
pub sparklines: SparklineList,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SparklineList {
#[serde(rename = "x14:sparkline", default)]
pub items: Vec<Sparkline>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Sparkline {
#[serde(rename = "xm:f")]
pub formula: String,
#[serde(rename = "xm:sqref")]
pub sqref: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_sparkline_group_default() {
let group = SparklineGroup {
sparkline_type: Some("line".to_string()),
markers: None,
high: None,
low: None,
first: None,
last: None,
negative: None,
display_x_axis: None,
line_weight: None,
min_axis_type: None,
max_axis_type: None,
sparklines: SparklineList {
items: vec![Sparkline {
formula: "Sheet1!A1:A10".to_string(),
sqref: "B1".to_string(),
}],
},
};
assert_eq!(group.sparklines.items.len(), 1);
}
#[test]
fn test_sparkline_with_options() {
let group = SparklineGroup {
sparkline_type: Some("column".to_string()),
markers: Some(true),
high: Some(true),
low: Some(true),
first: None,
last: None,
negative: Some(true),
display_x_axis: Some(true),
line_weight: Some(0.75),
min_axis_type: Some("group".to_string()),
max_axis_type: Some("group".to_string()),
sparklines: SparklineList { items: vec![] },
};
assert_eq!(group.sparkline_type, Some("column".to_string()));
assert_eq!(group.markers, Some(true));
}
}