use super::{Color, ColorStyle, ColorType, Effect, PaletteColor}; use enumset::EnumSet; /// Combine a color and an effect. /// /// Represents any transformation that can be applied to text. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct Style { /// Effect to apply. /// /// `None` to keep using previous effects. pub effects: EnumSet, /// Color style to apply. /// /// `None` to keep using the previous colors. pub color: Option, } impl Default for Style { fn default() -> Self { Self::none() } } impl Style { /// Returns a new `Style` that doesn't apply anything. pub fn none() -> Self { Style { effects: EnumSet::new(), color: None, } } /// Returns a new `Style` by merging all given styles. /// /// Will use the last non-`None` color, and will combine all effects. pub fn merge(styles: &[Style]) -> Self { let mut color = None; let mut effects = EnumSet::new(); for style in styles { if style.color.is_some() { color = style.color; } effects.insert_all(style.effects); } Style { color, effects } } /// Returns a combination of `self` and `other`. pub fn add(self, other: S) -> Self where S: Into