//! This module contains the `object style` that can be applied to an `styled object`. use super::{Color, StyledObject}; use std::fmt::Display; #[cfg(unix)] use super::Attribute; /// Struct that contains the style properties that can be applied to an displayable object. #[derive(Clone)] pub struct ObjectStyle { pub fg_color: Option, pub bg_color: Option, #[cfg(unix)] pub attrs: Vec, } impl Default for ObjectStyle { fn default() -> ObjectStyle { ObjectStyle { fg_color: Some(Color::White), bg_color: Some(Color::Black), #[cfg(unix)] attrs: Vec::new(), } } } impl ObjectStyle { /// Apply an `StyledObject` to the passed displayable object. pub fn apply_to( &self, val: D, ) -> StyledObject { StyledObject { object_style: self.clone(), content: val, } } /// Get an new instance of `ObjectStyle` pub fn new() -> ObjectStyle { return ObjectStyle { fg_color: None, bg_color: None, #[cfg(unix)] attrs: Vec::new(), }; } /// Set the background color of `ObjectStyle` to the passed color. pub fn bg(mut self, color: Color) -> ObjectStyle { self.bg_color = Some(color); self } /// Set the foreground color of `ObjectStyle` to the passed color. pub fn fg(mut self, color: Color) -> ObjectStyle { self.fg_color = Some(color); self } #[cfg(unix)] /// Add an attribute to the current text. Like italic or bold. pub fn add_attr(&mut self, attr: Attribute) { self.attrs.push(attr); } }