use crate::scale::{Expansion, ResolvedScale, Scale, ScaleDomain};
#[derive(Debug, Clone)]
pub struct X {
pub(crate) field: String,
pub(crate) scale_type: Option<Scale>,
pub(crate) domain: Option<ScaleDomain>,
pub(crate) expansion: Option<Expansion>,
pub(crate) zero: Option<bool>,
pub(crate) bins: Option<usize>,
pub(crate) resolved_scale: ResolvedScale,
}
impl X {
pub fn new(field: &str) -> Self {
Self {
field: field.to_string(),
scale_type: None,
domain: None,
expansion: None,
zero: None,
bins: 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 with_zero(mut self, zero: bool) -> Self {
self.zero = Some(zero);
self
}
pub fn with_bins(mut self, bins: usize) -> Self {
self.bins = Some(bins);
self
}
}
pub fn x(field: &str) -> X {
X::new(field)
}