pub struct TerminalAsync {
pub readline: Readline,
pub shared_writer: SharedWriter,
}
Fields§
§readline: Readline
Implementations§
source§impl TerminalAsync
impl TerminalAsync
sourcepub async fn try_new(prompt: &str) -> Result<Option<TerminalAsync>>
pub async fn try_new(prompt: &str) -> Result<Option<TerminalAsync>>
Create a new instance of TerminalAsync. Example of prompt
is "> "
.
§Returns
- If the terminal is not fully interactive then it will return None, and won’t
create the Readline. This is when the terminal is not considered fully
interactive:
stdout
is piped, eg:echo "foo" | cargo run --example spinner
.- or all three
stdin
,stdout
,stderr
are notis_tty
, eg when running incargo test
.
- Otherwise, it will return a TerminalAsync instance.
- In case there are any issues putting the terminal into raw mode, or getting the terminal size, it will return an error.
More info on terminal piping:
Examples found in repository?
examples/spinner.rs (line 54)
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
async fn example_with_concurrent_output(style: SpinnerStyle) -> miette::Result<()> {
let terminal_async = TerminalAsync::try_new("$ ").await?;
let terminal_async = terminal_async.expect("terminal is not fully interactive");
let address = "127.0.0.1:8000";
let message_trying_to_connect = format!(
"This is a sample indeterminate progress message: trying to connect to server on {}",
&address
);
let mut shared_writer = terminal_async.clone_shared_writer();
// Start spinner. Automatically pauses the terminal.
let mut maybe_spinner = Spinner::try_start(
message_trying_to_connect.clone(),
DELAY_UNIT,
style,
Arc::new(StdMutex::new(stderr())),
shared_writer.clone(),
)
.await?;
// Start another task, to simulate some async work, that uses a interval to display
// output, for a fixed amount of time, using `terminal_async.println_prefixed()`.
let _ = try_join!(tokio::spawn(async move {
// To calculate the delay.
let duration = ARTIFICIAL_UI_DELAY;
let start = Instant::now();
// Dropping the interval cancels it.
let mut interval = tokio::time::interval(Duration::from_millis(DELAY_MS * 5));
loop {
interval.tick().await;
let elapsed = start.elapsed();
if elapsed >= duration {
break;
}
let _ = writeln!(shared_writer, "⏳foo");
}
}));
// Stop spinner. Automatically resumes the terminal.
if let Some(spinner) = maybe_spinner.as_mut() {
spinner
.stop("This is a sample final message for the spinner component: Connected to server")
.await?;
}
tokio::time::sleep(Duration::from_millis(500)).await;
Ok(())
}
More examples
examples/terminal_async.rs (line 126)
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
async fn main() -> miette::Result<()> {
let maybe_terminal_async = TerminalAsync::try_new("> ").await?;
// If the terminal is not fully interactive, then return early.
let mut terminal_async = match maybe_terminal_async {
None => return Ok(()),
_ => maybe_terminal_async.unwrap(),
};
// Pre-populate the readline's history with some entries.
for command in Command::iter() {
terminal_async
.readline
.add_history_entry(command.to_string());
}
// Initialize tracing w/ the "async stdout" (SharedWriter), and file writer.
let display_preference = DisplayPreference::SharedWriter(terminal_async.shared_writer.clone());
let config = TracingConfig::new(display_preference);
tracing_setup::init(config)?;
// Start tasks.
let mut state = State::default();
let mut interval_1_task = interval(state.task_1_state.interval_delay);
let mut interval_2_task = interval(state.task_2_state.interval_delay);
terminal_async.println(get_info_message().to_string()).await;
loop {
select! {
_ = interval_1_task.tick() => {
task_1::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
_ = interval_2_task.tick() => {
task_2::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
user_input = terminal_async.get_readline_event() => match user_input {
Ok(readline_event) => {
let continuation = process_input_event::process_readline_event(
readline_event, &mut state, &mut terminal_async.clone_shared_writer(), &mut terminal_async.readline
)?;
if let ControlFlow::Break(_) = continuation { break }
},
Err(err) => {
let msg_1 = format!("Received err: {}", format!("{:?}",err).red());
let msg_2 = format!("{}", "Exiting...".red());
terminal_async.println(msg_1).await;
terminal_async.println(msg_2).await;
break;
},
}
}
}
// Flush all writers to stdout
let _ = terminal_async.flush().await;
Ok(())
}
Examples found in repository?
examples/spinner.rs (line 62)
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
async fn example_with_concurrent_output(style: SpinnerStyle) -> miette::Result<()> {
let terminal_async = TerminalAsync::try_new("$ ").await?;
let terminal_async = terminal_async.expect("terminal is not fully interactive");
let address = "127.0.0.1:8000";
let message_trying_to_connect = format!(
"This is a sample indeterminate progress message: trying to connect to server on {}",
&address
);
let mut shared_writer = terminal_async.clone_shared_writer();
// Start spinner. Automatically pauses the terminal.
let mut maybe_spinner = Spinner::try_start(
message_trying_to_connect.clone(),
DELAY_UNIT,
style,
Arc::new(StdMutex::new(stderr())),
shared_writer.clone(),
)
.await?;
// Start another task, to simulate some async work, that uses a interval to display
// output, for a fixed amount of time, using `terminal_async.println_prefixed()`.
let _ = try_join!(tokio::spawn(async move {
// To calculate the delay.
let duration = ARTIFICIAL_UI_DELAY;
let start = Instant::now();
// Dropping the interval cancels it.
let mut interval = tokio::time::interval(Duration::from_millis(DELAY_MS * 5));
loop {
interval.tick().await;
let elapsed = start.elapsed();
if elapsed >= duration {
break;
}
let _ = writeln!(shared_writer, "⏳foo");
}
}));
// Stop spinner. Automatically resumes the terminal.
if let Some(spinner) = maybe_spinner.as_mut() {
spinner
.stop("This is a sample final message for the spinner component: Connected to server")
.await?;
}
tokio::time::sleep(Duration::from_millis(500)).await;
Ok(())
}
More examples
examples/terminal_async.rs (line 156)
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
async fn main() -> miette::Result<()> {
let maybe_terminal_async = TerminalAsync::try_new("> ").await?;
// If the terminal is not fully interactive, then return early.
let mut terminal_async = match maybe_terminal_async {
None => return Ok(()),
_ => maybe_terminal_async.unwrap(),
};
// Pre-populate the readline's history with some entries.
for command in Command::iter() {
terminal_async
.readline
.add_history_entry(command.to_string());
}
// Initialize tracing w/ the "async stdout" (SharedWriter), and file writer.
let display_preference = DisplayPreference::SharedWriter(terminal_async.shared_writer.clone());
let config = TracingConfig::new(display_preference);
tracing_setup::init(config)?;
// Start tasks.
let mut state = State::default();
let mut interval_1_task = interval(state.task_1_state.interval_delay);
let mut interval_2_task = interval(state.task_2_state.interval_delay);
terminal_async.println(get_info_message().to_string()).await;
loop {
select! {
_ = interval_1_task.tick() => {
task_1::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
_ = interval_2_task.tick() => {
task_2::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
user_input = terminal_async.get_readline_event() => match user_input {
Ok(readline_event) => {
let continuation = process_input_event::process_readline_event(
readline_event, &mut state, &mut terminal_async.clone_shared_writer(), &mut terminal_async.readline
)?;
if let ControlFlow::Break(_) = continuation { break }
},
Err(err) => {
let msg_1 = format!("Received err: {}", format!("{:?}",err).red());
let msg_2 = format!("{}", "Exiting...".red());
terminal_async.println(msg_1).await;
terminal_async.println(msg_2).await;
break;
},
}
}
}
// Flush all writers to stdout
let _ = terminal_async.flush().await;
Ok(())
}
sourcepub async fn get_readline_event(&mut self) -> Result<ReadlineEvent>
pub async fn get_readline_event(&mut self) -> Result<ReadlineEvent>
Replacement for std::io::Stdin::read_line() (this is async and non blocking).
Examples found in repository?
examples/terminal_async.rs (line 161)
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
async fn main() -> miette::Result<()> {
let maybe_terminal_async = TerminalAsync::try_new("> ").await?;
// If the terminal is not fully interactive, then return early.
let mut terminal_async = match maybe_terminal_async {
None => return Ok(()),
_ => maybe_terminal_async.unwrap(),
};
// Pre-populate the readline's history with some entries.
for command in Command::iter() {
terminal_async
.readline
.add_history_entry(command.to_string());
}
// Initialize tracing w/ the "async stdout" (SharedWriter), and file writer.
let display_preference = DisplayPreference::SharedWriter(terminal_async.shared_writer.clone());
let config = TracingConfig::new(display_preference);
tracing_setup::init(config)?;
// Start tasks.
let mut state = State::default();
let mut interval_1_task = interval(state.task_1_state.interval_delay);
let mut interval_2_task = interval(state.task_2_state.interval_delay);
terminal_async.println(get_info_message().to_string()).await;
loop {
select! {
_ = interval_1_task.tick() => {
task_1::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
_ = interval_2_task.tick() => {
task_2::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
user_input = terminal_async.get_readline_event() => match user_input {
Ok(readline_event) => {
let continuation = process_input_event::process_readline_event(
readline_event, &mut state, &mut terminal_async.clone_shared_writer(), &mut terminal_async.readline
)?;
if let ControlFlow::Break(_) = continuation { break }
},
Err(err) => {
let msg_1 = format!("Received err: {}", format!("{:?}",err).red());
let msg_2 = format!("{}", "Exiting...".red());
terminal_async.println(msg_1).await;
terminal_async.println(msg_2).await;
break;
},
}
}
}
// Flush all writers to stdout
let _ = terminal_async.flush().await;
Ok(())
}
sourcepub async fn println<T>(&mut self, content: T)where
T: Display,
pub async fn println<T>(&mut self, content: T)where
T: Display,
Don’t change the content
. Print it as is. This works concurrently and is async
and non blocking. And it is compatible w/ the
get_readline_event method.
Examples found in repository?
examples/terminal_async.rs (line 151)
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
async fn main() -> miette::Result<()> {
let maybe_terminal_async = TerminalAsync::try_new("> ").await?;
// If the terminal is not fully interactive, then return early.
let mut terminal_async = match maybe_terminal_async {
None => return Ok(()),
_ => maybe_terminal_async.unwrap(),
};
// Pre-populate the readline's history with some entries.
for command in Command::iter() {
terminal_async
.readline
.add_history_entry(command.to_string());
}
// Initialize tracing w/ the "async stdout" (SharedWriter), and file writer.
let display_preference = DisplayPreference::SharedWriter(terminal_async.shared_writer.clone());
let config = TracingConfig::new(display_preference);
tracing_setup::init(config)?;
// Start tasks.
let mut state = State::default();
let mut interval_1_task = interval(state.task_1_state.interval_delay);
let mut interval_2_task = interval(state.task_2_state.interval_delay);
terminal_async.println(get_info_message().to_string()).await;
loop {
select! {
_ = interval_1_task.tick() => {
task_1::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
_ = interval_2_task.tick() => {
task_2::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
user_input = terminal_async.get_readline_event() => match user_input {
Ok(readline_event) => {
let continuation = process_input_event::process_readline_event(
readline_event, &mut state, &mut terminal_async.clone_shared_writer(), &mut terminal_async.readline
)?;
if let ControlFlow::Break(_) = continuation { break }
},
Err(err) => {
let msg_1 = format!("Received err: {}", format!("{:?}",err).red());
let msg_2 = format!("{}", "Exiting...".red());
terminal_async.println(msg_1).await;
terminal_async.println(msg_2).await;
break;
},
}
}
}
// Flush all writers to stdout
let _ = terminal_async.flush().await;
Ok(())
}
sourcepub async fn println_prefixed<T>(&mut self, content: T)where
T: Display,
pub async fn println_prefixed<T>(&mut self, content: T)where
T: Display,
Prefix the content
with a color and special characters, then print it.
sourcepub async fn flush(&mut self)
pub async fn flush(&mut self)
Simply flush the buffer. If there’s a newline in the buffer, it will be printed. Otherwise it won’t.
Examples found in repository?
examples/terminal_async.rs (line 180)
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
async fn main() -> miette::Result<()> {
let maybe_terminal_async = TerminalAsync::try_new("> ").await?;
// If the terminal is not fully interactive, then return early.
let mut terminal_async = match maybe_terminal_async {
None => return Ok(()),
_ => maybe_terminal_async.unwrap(),
};
// Pre-populate the readline's history with some entries.
for command in Command::iter() {
terminal_async
.readline
.add_history_entry(command.to_string());
}
// Initialize tracing w/ the "async stdout" (SharedWriter), and file writer.
let display_preference = DisplayPreference::SharedWriter(terminal_async.shared_writer.clone());
let config = TracingConfig::new(display_preference);
tracing_setup::init(config)?;
// Start tasks.
let mut state = State::default();
let mut interval_1_task = interval(state.task_1_state.interval_delay);
let mut interval_2_task = interval(state.task_2_state.interval_delay);
terminal_async.println(get_info_message().to_string()).await;
loop {
select! {
_ = interval_1_task.tick() => {
task_1::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
_ = interval_2_task.tick() => {
task_2::tick(&mut state, &mut terminal_async.clone_shared_writer())?;
},
user_input = terminal_async.get_readline_event() => match user_input {
Ok(readline_event) => {
let continuation = process_input_event::process_readline_event(
readline_event, &mut state, &mut terminal_async.clone_shared_writer(), &mut terminal_async.readline
)?;
if let ControlFlow::Break(_) = continuation { break }
},
Err(err) => {
let msg_1 = format!("Received err: {}", format!("{:?}",err).red());
let msg_2 = format!("{}", "Exiting...".red());
terminal_async.println(msg_1).await;
terminal_async.println(msg_2).await;
break;
},
}
}
}
// Flush all writers to stdout
let _ = terminal_async.flush().await;
Ok(())
}
pub async fn pause(&mut self)
pub async fn resume(&mut self)
sourcepub fn close(&mut self)
pub fn close(&mut self)
Close the underlying Readline instance. This will terminate all the tasks that are managing SharedWriter tasks. This is useful when you want to exit the CLI event loop, typically when the user requests it.
pub fn print_exit_message(message: &str) -> Result<()>
Auto Trait Implementations§
impl Freeze for TerminalAsync
impl !RefUnwindSafe for TerminalAsync
impl !Send for TerminalAsync
impl !Sync for TerminalAsync
impl Unpin for TerminalAsync
impl !UnwindSafe for TerminalAsync
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T
in a tonic::Request
source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Set the foreground color generically Read more
source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Set the background color generically. Read more
source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Change the foreground color to black
source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Change the background color to black
source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Change the foreground color to red
source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Change the background color to red
source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Change the foreground color to green
source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Change the background color to green
source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Change the foreground color to yellow
source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Change the background color to yellow
source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Change the foreground color to blue
source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Change the background color to blue
source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Change the foreground color to magenta
source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Change the background color to magenta
source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Change the foreground color to purple
source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Change the background color to purple
source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Change the foreground color to cyan
source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Change the background color to cyan
source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Change the foreground color to white
source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Change the background color to white
source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Change the foreground color to the terminal default
source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Change the background color to the terminal default
source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Change the foreground color to bright black
source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Change the background color to bright black
source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Change the foreground color to bright red
source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Change the background color to bright red
source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Change the foreground color to bright green
source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Change the background color to bright green
source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Change the foreground color to bright yellow
source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Change the background color to bright yellow
source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Change the foreground color to bright blue
source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Change the background color to bright blue
source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Change the foreground color to bright magenta
source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Change the background color to bright magenta
source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Change the foreground color to bright purple
source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Change the background color to bright purple
source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Change the foreground color to bright cyan
source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Change the background color to bright cyan
source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Change the foreground color to bright white
source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Change the background color to bright white
source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Make the text bold
source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Make the text dim
source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Make the text italicized
source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Make the text italicized
source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Make the text blink
source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Make the text blink (but fast!)
source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Swap the foreground and background colors
Hide the text
source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Cross out the text
source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
Set the foreground color at runtime. Only use if you do not know which color will be used at
compile-time. If the color is constant, use either
OwoColorize::fg
or
a color-specific method, such as OwoColorize::green
, Read moresource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
Set the background color at runtime. Only use if you do not know what color to use at
compile-time. If the color is constant, use either
OwoColorize::bg
or
a color-specific method, such as OwoColorize::on_yellow
, Read moresource§fn fg_rgb<const R: u8, const G: u8, const B: u8>(
&self
) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
Set the foreground color to a specific RGB value.
source§fn bg_rgb<const R: u8, const G: u8, const B: u8>(
&self
) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
Set the background color to a specific RGB value.
source§fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
Sets the foreground color to an RGB value.
source§fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
Sets the background color to an RGB value.