use crate::scale::{Expansion, ResolvedScale, Scale, ScaleDomain};
#[derive(Debug, Clone)]
pub struct Shape {
pub(crate) field: String,
pub(crate) scale_type: Option<Scale>,
pub(crate) domain: Option<ScaleDomain>,
pub(crate) expansion: Option<Expansion>,
pub(crate) resolved_scale: ResolvedScale,
}
impl Shape {
pub fn new(field: &str) -> Self {
Self {
field: field.to_string(),
scale_type: Some(Scale::Discrete),
domain: None,
expansion: None,
resolved_scale: ResolvedScale::none(),
}
}
pub fn with_scale(mut self, scale_type: Scale) -> Self {
self.scale_type = Some(scale_type);
self
}
pub fn with_domain(mut self, domain: ScaleDomain) -> Self {
self.domain = Some(domain);
self
}
pub fn with_expansion(mut self, expansion: Expansion) -> Self {
self.expansion = Some(expansion);
self
}
}
pub fn shape(field: &str) -> Shape {
Shape::new(field)
}