ErrorContext

Struct ErrorContext 

Source
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:

  1. Error: The main error message in red
  2. Details: Additional context about the error in yellow (optional)
  3. 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: AgpmError

The 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

Source

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);
Source

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/");
Source

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");
Source

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 stderr
Source§

impl ErrorContext

Source

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

Source§

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

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

impl Display for ErrorContext

Source§

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

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

impl Error for ErrorContext

1.30.0 · 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

Auto Trait Implementations§

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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> ToStringFallible for T
where T: Display,

Source§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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