Skip to main content

Error

Enum Error 

Source
pub enum Error {
    Io(Error),
    RawModeFailure {
        action: &'static str,
        source: Error,
    },
    AltScreenFailure {
        action: &'static str,
        source: Error,
    },
    EventPoll(Error),
    Render(Error),
}
Expand description

Errors that can occur when running a bubbletea program.

This enum represents all possible error conditions when running a TUI application with bubbletea.

§Error Handling

Most errors from bubbletea are recoverable. The recommended pattern is to use the ? operator for propagation:

use bubbletea::{Program, Result};

fn run_app() -> Result<()> {
    let program = Program::new(MyModel::default());
    program.run()?;
    Ok(())
}

§Recovery Strategies

Error VariantRecovery Strategy
IoCheck terminal availability, retry, or report to user
RawModeFailureCheck terminal compatibility
AltScreenFailureDisable alt screen option
EventPollTerminal may be disconnected
RenderCheck output stream, retry

§Example: Graceful Error Handling

use bubbletea::{Program, Error};

match Program::new(my_model).run() {
    Ok(final_model) => {
        println!("Program completed successfully");
    }
    Err(Error::Io(e)) if e.kind() == std::io::ErrorKind::NotConnected => {
        eprintln!("Terminal disconnected, saving state...");
        // Save any important state before exiting
    }
    Err(Error::RawModeFailure { .. }) => {
        eprintln!("Terminal doesn't support raw mode. Try a different terminal.");
    }
    Err(e) => {
        eprintln!("Program error: {}", e);
        std::process::exit(1);
    }
}

Variants§

§

Io(Error)

I/O error during terminal operations.

This typically occurs when:

  • The terminal is not available (e.g., running in a pipe)
  • The terminal was closed unexpectedly
  • System I/O resources are exhausted
  • Terminal control sequences failed

§Recovery

Check if stdin/stdout are TTYs before starting your program. Consider using a fallback mode for non-interactive environments.

§Underlying Error

The underlying std::io::Error can be accessed to determine the specific cause. Common error kinds include:

  • NotConnected: Terminal was disconnected
  • BrokenPipe: Output stream closed
  • Other: Terminal control sequence errors
§

RawModeFailure

Failed to enable or disable raw mode.

Raw mode is required for TUI operation as it disables terminal line buffering and echo. This error typically indicates the terminal doesn’t support raw mode or isn’t a TTY.

§Recovery

Verify the program is running in an interactive terminal. Some terminals (especially on Windows) may have limited support.

Fields

§action: &'static str

Whether we were trying to enable or disable raw mode.

§source: Error

The underlying I/O error.

§

AltScreenFailure

Failed to enter or exit alternate screen.

Alternate screen provides a separate buffer that preserves the user’s terminal content. This error may indicate the terminal doesn’t support alternate screen mode.

§Recovery

Try running without .with_alt_screen().

Fields

§action: &'static str

Whether we were trying to enter or exit alt screen.

§source: Error

The underlying I/O error.

§

EventPoll(Error)

Failed to poll for terminal events.

This error occurs when the event polling system fails, typically because the terminal was disconnected or closed.

§Recovery

The terminal connection may be lost. Save state and exit.

§

Render(Error)

Failed to render the view to the terminal.

This error occurs when writing the view output fails, typically due to a broken pipe or disconnected terminal.

§Recovery

The output stream may be closed. Save state and exit.

Trait Implementations§

Source§

impl Debug for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Error

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for Error

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Error> for Error

Source§

fn from(source: Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl Freeze for Error

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more