pub enum ExecutionError {
HandlerNotFound {
command: String,
implementation: String,
suggestion: Option<String>,
},
ContextDowncastFailed {
expected_type: String,
suggestion: Option<String>,
},
InvalidContextState {
reason: String,
suggestion: Option<String>,
},
CommandFailed(Error),
Interrupted,
}Expand description
Errors during command execution
These errors occur during user code execution.
Variants§
HandlerNotFound
Command handler not found
The implementation name in the config doesn’t match any registered handler.
§Example
use dynamic_cli::error::ExecutionError;
let error = ExecutionError::HandlerNotFound {
command: "run".to_string(),
implementation: "run_handler".to_string(),
suggestion: Some(
"Ensure .register_handler(\"run_handler\", ...) was called before running."
.to_string()
),
};
let msg = format!("{}", error);
assert!(msg.contains("run"));Fields
ContextDowncastFailed
Error during context downcasting
The handler tried to downcast the context to an incorrect type.
§Example
use dynamic_cli::error::ExecutionError;
let error = ExecutionError::ContextDowncastFailed {
expected_type: "MyAppContext".to_string(),
suggestion: Some(
"Check that the context type passed to the handler matches the expected type."
.to_string()
),
};
let msg = format!("{}", error);
assert!(msg.contains("MyAppContext"));Fields
InvalidContextState
Invalid context state for this operation
§Example
use dynamic_cli::error::ExecutionError;
let error = ExecutionError::InvalidContextState {
reason: "connection pool not initialised".to_string(),
suggestion: Some("Ensure the context is fully initialised before running commands.".to_string()),
};
let msg = format!("{}", error);
assert!(msg.contains("connection pool"));Fields
CommandFailed(Error)
Error in command implementation
Wraps errors from user code.
Interrupted
Command interrupted by user
User pressed Ctrl+C during execution.
Implementations§
Source§impl ExecutionError
impl ExecutionError
Sourcepub fn handler_not_found(command: &str, implementation: &str) -> Self
pub fn handler_not_found(command: &str, implementation: &str) -> Self
Create a handler-not-found error with an actionable suggestion
The suggestion interpolates the implementation name so the user
knows exactly which .register_handler() call is missing.
§Example
use dynamic_cli::error::ExecutionError;
let error = ExecutionError::handler_not_found("run", "run_handler");
match error {
ExecutionError::HandlerNotFound { suggestion, .. } => {
assert!(suggestion.as_deref().unwrap_or("").contains("run_handler"));
}
_ => panic!("wrong variant"),
}Trait Implementations§
Source§impl Debug for ExecutionError
impl Debug for ExecutionError
Source§impl Display for ExecutionError
impl Display for ExecutionError
Source§impl Error for ExecutionError
impl Error for ExecutionError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
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
fn description(&self) -> &str
👎Deprecated since 1.42.0:
use the Display impl or to_string()
Source§impl From<ExecutionError> for DynamicCliError
impl From<ExecutionError> for DynamicCliError
Source§fn from(source: ExecutionError) -> Self
fn from(source: ExecutionError) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl Freeze for ExecutionError
impl RefUnwindSafe for ExecutionError
impl Send for ExecutionError
impl Sync for ExecutionError
impl Unpin for ExecutionError
impl UnsafeUnpin for ExecutionError
impl UnwindSafe for ExecutionError
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