use crate::marks::value::{ColorOrGradient, EncodingValue, Gradient};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct TrailMark {
pub name: String,
pub clip: bool,
pub len: u32,
pub gradients: Vec<Gradient>,
pub stroke: ColorOrGradient,
pub x: EncodingValue<f32>,
pub y: EncodingValue<f32>,
pub size: EncodingValue<f32>,
pub defined: EncodingValue<bool>,
pub zindex: Option<i32>,
}
impl TrailMark {
pub fn x_iter(&self) -> Box<dyn Iterator<Item = &f32> + '_> {
self.x.as_iter(self.len as usize, None)
}
pub fn y_iter(&self) -> Box<dyn Iterator<Item = &f32> + '_> {
self.y.as_iter(self.len as usize, None)
}
pub fn size_iter(&self) -> Box<dyn Iterator<Item = &f32> + '_> {
self.size.as_iter(self.len as usize, None)
}
pub fn defined_iter(&self) -> Box<dyn Iterator<Item = &bool> + '_> {
self.defined.as_iter(self.len as usize, None)
}
}
impl Default for TrailMark {
fn default() -> Self {
Self {
name: "trail_mark".to_string(),
clip: true,
len: 1,
x: EncodingValue::Scalar { value: 0.0 },
y: EncodingValue::Scalar { value: 0.0 },
size: EncodingValue::Scalar { value: 1.0 },
defined: EncodingValue::Scalar { value: true },
stroke: ColorOrGradient::Color([0.0, 0.0, 0.0, 1.0]),
gradients: vec![],
zindex: None,
}
}
}