| 1 | //! This module contains the logic to style some content.
|
| 2 |
|
| 3 | use std::fmt::{self, Display, Formatter};
|
| 4 |
|
| 5 | use super::{ContentStyle, PrintStyledContent};
|
| 6 |
|
| 7 | /// The style with the content to be styled.
|
| 8 | ///
|
| 9 | /// # Examples
|
| 10 | ///
|
| 11 | /// ```rust
|
| 12 | /// use crossterm::style::{style, Color, Attribute, Stylize};
|
| 13 | ///
|
| 14 | /// let styled = "Hello there"
|
| 15 | /// .with(Color::Yellow)
|
| 16 | /// .on(Color::Blue)
|
| 17 | /// .attribute(Attribute::Bold);
|
| 18 | ///
|
| 19 | /// println!("{}" , styled);
|
| 20 | /// ```
|
| 21 | #[derive (Copy, Clone, Debug, Eq, PartialEq)]
|
| 22 | pub struct StyledContent<D: Display> {
|
| 23 | /// The style (colors, content attributes).
|
| 24 | style: ContentStyle,
|
| 25 | /// A content to apply the style on.
|
| 26 | content: D,
|
| 27 | }
|
| 28 |
|
| 29 | impl<D: Display> StyledContent<D> {
|
| 30 | /// Creates a new `StyledContent`.
|
| 31 | #[inline ]
|
| 32 | pub fn new(style: ContentStyle, content: D) -> StyledContent<D> {
|
| 33 | StyledContent { style, content }
|
| 34 | }
|
| 35 |
|
| 36 | /// Returns the content.
|
| 37 | #[inline ]
|
| 38 | pub fn content(&self) -> &D {
|
| 39 | &self.content
|
| 40 | }
|
| 41 |
|
| 42 | /// Returns the style.
|
| 43 | #[inline ]
|
| 44 | pub fn style(&self) -> &ContentStyle {
|
| 45 | &self.style
|
| 46 | }
|
| 47 |
|
| 48 | /// Returns a mutable reference to the style, so that it can be further
|
| 49 | /// manipulated
|
| 50 | #[inline ]
|
| 51 | pub fn style_mut(&mut self) -> &mut ContentStyle {
|
| 52 | &mut self.style
|
| 53 | }
|
| 54 | }
|
| 55 |
|
| 56 | impl<D: Display> AsRef<ContentStyle> for StyledContent<D> {
|
| 57 | fn as_ref(&self) -> &ContentStyle {
|
| 58 | &self.style
|
| 59 | }
|
| 60 | }
|
| 61 | impl<D: Display> AsMut<ContentStyle> for StyledContent<D> {
|
| 62 | fn as_mut(&mut self) -> &mut ContentStyle {
|
| 63 | &mut self.style
|
| 64 | }
|
| 65 | }
|
| 66 |
|
| 67 | impl<D: Display> Display for StyledContent<D> {
|
| 68 | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
| 69 | crate::command::execute_fmt(
|
| 70 | f,
|
| 71 | command:PrintStyledContent(StyledContent {
|
| 72 | style: self.style,
|
| 73 | content: &self.content,
|
| 74 | }),
|
| 75 | )
|
| 76 | }
|
| 77 | }
|
| 78 | |