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
Arcallows the same console to be shared across threads and async tasks. -
Default method implementations: The
emit_*methods have default implementations that only requireset_consoleandconsoleto 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§
Sourcefn set_console(&mut self, console: Option<Arc<SqlModelConsole>>)
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.
Sourcefn console(&self) -> Option<&Arc<SqlModelConsole>>
fn console(&self) -> Option<&Arc<SqlModelConsole>>
Get reference to the attached console, if any.
Provided Methods§
Sourcefn has_console(&self) -> bool
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.
Sourcefn emit_status(&self, message: &str)
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.
Sourcefn emit_success(&self, message: &str)
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.
Sourcefn emit_error(&self, message: &str)
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.
Sourcefn emit_warning(&self, message: &str)
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.