Skip to main content

ConsoleAware

Trait ConsoleAware 

Source
pub trait ConsoleAware {
    // Required methods
    fn set_console(&mut self, console: Option<Arc<SqlModelConsole>>);
    fn console(&self) -> Option<&Arc<SqlModelConsole>>;

    // Provided methods
    fn has_console(&self) -> bool { ... }
    fn emit_status(&self, message: &str) { ... }
    fn emit_success(&self, message: &str) { ... }
    fn emit_error(&self, message: &str) { ... }
    fn emit_warning(&self, message: &str) { ... }
    fn emit_info(&self, message: &str) { ... }
}
Expand description

Trait for components that can accept a console for rich output.

Implementing this trait allows database connections, pools, and other components to emit styled console output when a console is attached.

The trait uses Arc<SqlModelConsole> to allow sharing a single console across multiple components without lifetime complications.

§Design Notes

  • Optional attachment: Components work without a console attached, silently ignoring output calls. This makes console support opt-in.

  • Thread-safe sharing: Using Arc allows the same console to be shared across threads and async tasks.

  • Default method implementations: The emit_* methods have default implementations that only require set_console and console to be defined.

§Example

use sqlmodel_console::{ConsoleAware, SqlModelConsole, OutputMode};
use std::sync::Arc;

struct DatabasePool {
    console: Option<Arc<SqlModelConsole>>,
    connections: Vec<String>,
}

impl ConsoleAware for DatabasePool {
    fn set_console(&mut self, console: Option<Arc<SqlModelConsole>>) {
        self.console = console;
    }

    fn console(&self) -> Option<&Arc<SqlModelConsole>> {
        self.console.as_ref()
    }
}

let mut pool = DatabasePool {
    console: None,
    connections: Vec::new(),
};

// No console attached - emit calls are silently ignored
pool.emit_status("Starting pool...");

// Attach a console
let console = Arc::new(SqlModelConsole::with_mode(OutputMode::Plain));
pool.set_console(Some(console));

// Now emit calls produce output
pool.emit_success("Pool ready with 5 connections");

Required Methods§

Source

fn set_console(&mut self, console: Option<Arc<SqlModelConsole>>)

Attach or detach a console.

Pass Some(console) to enable rich output. Pass None to disable console output.

Source

fn console(&self) -> Option<&Arc<SqlModelConsole>>

Get reference to the attached console, if any.

Provided Methods§

Source

fn has_console(&self) -> bool

Check if a console is attached.

This is a convenience method that returns true if a console is currently attached.

Source

fn emit_status(&self, message: &str)

Emit a status message if console is attached.

Status messages are informational and go to stderr. If no console is attached, this is a no-op.

Source

fn emit_success(&self, message: &str)

Emit a success message if console is attached.

Success messages indicate successful completion of an operation. If no console is attached, this is a no-op.

Source

fn emit_error(&self, message: &str)

Emit an error message if console is attached.

Error messages indicate failures or problems. If no console is attached, this is a no-op.

Source

fn emit_warning(&self, message: &str)

Emit a warning message if console is attached.

Warning messages indicate potential issues that don’t prevent operation. If no console is attached, this is a no-op.

Source

fn emit_info(&self, message: &str)

Emit an info message if console is attached.

Info messages provide helpful information to the user. If no console is attached, this is a no-op.

Implementors§