pub struct ErrorContext {
pub error: AgpmError,
pub suggestion: Option<String>,
pub details: Option<String>,
}Expand description
Error context wrapper that provides user-friendly error information
ErrorContext wraps a AgpmError and adds optional user-friendly messages,
suggestions for resolution, and additional details. This is the primary way
AGPM presents errors to CLI users.
§Design Philosophy
Error contexts are designed to be:
- Actionable: Include specific suggestions for resolving the error
- Informative: Provide context about why the error occurred
- Colorized: Use terminal colors to highlight important information
- Consistent: Follow a standard format across all error types
§Display Format
When displayed, errors show:
- Error: The main error message in red
- Details: Additional context about the error in yellow (optional)
- Suggestion: Actionable steps to resolve the issue in green (optional)
§Examples
§Creating Error Context
use agpm_cli::core::{AgpmError, ErrorContext};
let error = AgpmError::GitNotFound;
let context = ErrorContext::new(error)
.with_suggestion("Install git from https://git-scm.com/")
.with_details("AGPM requires git for repository operations");
// Display to terminal with colors
context.display();
// Or convert to string for logging
let message = context.to_string();§Builder Pattern Usage
use agpm_cli::core::{AgpmError, ErrorContext};
let context = ErrorContext::new(AgpmError::ManifestNotFound)
.with_suggestion("Create a agpm.toml file in your project directory")
.with_details("AGPM searches current and parent directories for agpm.toml");
println!("{}", context);§Quick Suggestion Creation
use agpm_cli::core::ErrorContext;
// Create context with just a suggestion (useful for generic errors)
let context = ErrorContext::suggestion("Try running the command with --verbose");Fields§
§error: AgpmErrorThe underlying AGPM error
suggestion: Option<String>Optional suggestion for resolving the error
details: Option<String>Optional additional details about the error
Implementations§
Source§impl ErrorContext
impl ErrorContext
Sourcepub const fn new(error: AgpmError) -> Self
pub const fn new(error: AgpmError) -> Self
Create a new error context from a AgpmError
This creates a basic error context with no additional suggestions or details.
Use the builder methods with_suggestion and with_details to add
user-friendly information.
§Examples
use agpm_cli::core::{AgpmError, ErrorContext};
let context = ErrorContext::new(AgpmError::GitNotFound);Sourcepub fn with_suggestion(self, suggestion: impl Into<String>) -> Self
pub fn with_suggestion(self, suggestion: impl Into<String>) -> Self
Add a suggestion for resolving the error
Suggestions should be actionable steps that users can take to resolve the error. They are displayed in green in the terminal to draw attention.
§Examples
use agpm_cli::core::{AgpmError, ErrorContext};
let context = ErrorContext::new(AgpmError::GitNotFound)
.with_suggestion("Install git using 'brew install git' or visit https://git-scm.com/");Sourcepub fn with_details(self, details: impl Into<String>) -> Self
pub fn with_details(self, details: impl Into<String>) -> Self
Add additional details explaining the error
Details provide context about why the error occurred or what it means. They are displayed in yellow in the terminal to provide additional context without being as prominent as the main error or suggestion.
§Examples
use agpm_cli::core::{AgpmError, ErrorContext};
let context = ErrorContext::new(AgpmError::ManifestNotFound)
.with_details("AGPM looks for agpm.toml in current directory and parent directories");Sourcepub fn display(&self)
pub fn display(&self)
Display the error context to stderr with terminal colors
This method prints the error, details, and suggestion to stderr using color coding:
- Error message: Red and bold
- Details: Yellow
- Suggestion: Green
This is the primary way AGPM presents errors to users in the CLI.
§Examples
use agpm_cli::core::{AgpmError, ErrorContext};
let context = ErrorContext::new(AgpmError::GitNotFound)
.with_suggestion("Install git from https://git-scm.com/")
.with_details("AGPM requires git for repository operations");
context.display(); // Prints colored error to stderrSource§impl ErrorContext
impl ErrorContext
Sourcepub fn suggestion(suggestion: impl Into<String>) -> Self
pub fn suggestion(suggestion: impl Into<String>) -> Self
Create an ErrorContext with only a suggestion (no specific error)
This is useful for generic errors where you want to provide a suggestion
but don’t have a specific AgpmError variant.
§Examples
use agpm_cli::core::ErrorContext;
let context = ErrorContext::suggestion("Try running with --verbose for more information");
context.display();Trait Implementations§
Source§impl Debug for ErrorContext
impl Debug for ErrorContext
Source§impl Display for ErrorContext
impl Display for ErrorContext
Source§impl Error for ErrorContext
impl Error for ErrorContext
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Auto Trait Implementations§
impl Freeze for ErrorContext
impl !RefUnwindSafe for ErrorContext
impl Send for ErrorContext
impl Sync for ErrorContext
impl Unpin for ErrorContext
impl !UnwindSafe for ErrorContext
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
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>
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>
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> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.