diff --git a/examples/examples.rs b/examples/examples.rs index c96e1b7..e69ca9c 100644 --- a/examples/examples.rs +++ b/examples/examples.rs @@ -9,7 +9,7 @@ extern crate crossterm; // modules that could be test -mod terminal; +//mod terminal; mod color; mod cursor; mod some_types; @@ -17,6 +17,14 @@ mod input; use std::io::Write; use std::{thread,time}; + +use crossterm::style::{style, Color, DisplayableObject}; +use crossterm::terminal::terminal; +use crossterm::Screen; + fn main() { + let screen = Screen::default(); + + println!("\nExample:\n\n\taws --profile {} s3 ls\n", DisplayableObject::new(&screen, &style("test").with(Color::Yellow))); } diff --git a/src/modules/style/mod.rs b/src/modules/style/mod.rs index 7c28d37..626be9a 100644 --- a/src/modules/style/mod.rs +++ b/src/modules/style/mod.rs @@ -20,6 +20,7 @@ use std::fmt::Display; pub use self::color::{TerminalColor, color}; pub use self::objectstyle::ObjectStyle; pub use self::styledobject::StyledObject; +pub use self::styledobject::DisplayableObject; use super::functions; use TerminalOutput; diff --git a/src/modules/style/styledobject.rs b/src/modules/style/styledobject.rs index a265be2..1921690 100644 --- a/src/modules/style/styledobject.rs +++ b/src/modules/style/styledobject.rs @@ -14,7 +14,7 @@ pub struct StyledObject { pub content: D, } -impl StyledObject { +impl<'a, D: Display> StyledObject { /// Set the foreground of the styled object to the passed `Color` /// /// ```rust @@ -179,4 +179,33 @@ impl StyledObject { colored_terminal.reset(); } } + +// pub fn get_displayable(&self, screen: &'a Screen) -> DisplayableObject<'a, D> +// { +// return DisplayableObject::new(screen, &self) +// } +} + +use std::fmt::{Formatter, Error}; + +pub struct DisplayableObject<'a, D:Display + 'a> +{ + styled_object: &'a StyledObject, + screen: &'a Screen, +} + +impl <'a, D: Display + 'a> DisplayableObject<'a, D> +{ + pub fn new(screen: &'a Screen, styled_object: &'a StyledObject) -> DisplayableObject<'a, D> + { + DisplayableObject { screen, styled_object } + } +} + +impl<'a, D: Display + 'a> Display for DisplayableObject<'a, D> +{ + fn fmt(&self, f: &mut Formatter) -> Result<(), Error> { + self.styled_object.paint(&self.screen); + return Ok(()) + } }