Skip to main content

Error

Enum Error 

Source
#[non_exhaustive]
pub enum Error { Unsupported(String), Auth(String), NotFound(String), InvalidRequest(String), RateLimited { retry_after: Option<Duration>, }, Timeout { elapsed: Duration, }, Refused { category: Option<String>, }, Transient(String), OverBudget(String), Unreadable(String), }
Expand description

Why a call did not produce an answer.

The variants are chosen so a caller can decide what to do without reading the message. Retrying a bad credential earns a rate limit, and retrying a request the provider will never accept just spends the budget twice, so those cases are separated from the ones worth trying again.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Unsupported(String)

The provider cannot do this at all. Ask crate::Provider::capabilities first.

§

Auth(String)

The credential was rejected. Never retry this one.

§

NotFound(String)

The model, endpoint or resource does not exist.

§

InvalidRequest(String)

The request was malformed, or the provider refused its shape.

§

RateLimited

Too many requests.

Honour retry_after when it is present. A backoff you guessed locally only makes the limit worse, because the provider is already telling you when it will clear.

Fields

§retry_after: Option<Duration>

How long the provider asked you to wait, when it said.

§

Timeout

A deadline passed.

Different from Error::Transient on purpose. The work may still be running on the provider’s side, so a retry can produce a second answer you are billed for.

Fields

§elapsed: Duration

How long the call ran before it was given up on.

§

Refused

The model declined to answer.

Surfaced rather than retried. A refusal is an answer, and asking again in the hope of a different one wastes a call and usually gets the same reply.

Fields

§category: Option<String>

What the provider said it was declining, when it said.

§

Transient(String)

Something went wrong that is worth trying again.

§

OverBudget(String)

The call was not made, because it would have taken the run over its cap.

Never a provider’s answer. Nothing was sent and nothing was billed: this is crate::Budget refusing before the money goes, which is the only place a cap can be enforced rather than reported.

Not retryable. The same request against the same spent budget is refused again, and what has to change is the cap or the run.

§

Unreadable(String)

The provider answered, and the answer could not be read.

A successful status code with a body this crate cannot parse is a failure. Treating it as an empty answer is how a run continues on nothing.

Implementations§

Source§

impl Error

Source

pub fn is_retryable(&self) -> bool

Whether trying the same call again is reasonable.

This is a hint, not a promise. It says the failure was not the caller’s fault and not permanent. It does not say the call is safe to repeat, which is a question about your request rather than about the error. A Error::Timeout is retryable and may still leave you paying for two answers.

Source

pub fn retry_after(&self) -> Option<Duration>

How long the provider asked you to wait, when it said.

Trait Implementations§

Source§

impl Debug for Error

Source§

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

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

impl Display for Error

Source§

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

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

impl Error for Error

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§

§

impl Freeze for Error

§

impl RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnsafeUnpin for Error

§

impl UnwindSafe for Error

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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