Skip to main content

KeyCommandError

Enum KeyCommandError 

Source
pub enum KeyCommandError {
    NoProgram,
    NotFound {
        program: String,
    },
    Spawn {
        program: String,
        cause: Error,
    },
    Timeout {
        program: String,
        secs: u64,
    },
    Signal {
        program: String,
    },
    Failed {
        program: String,
        code: i32,
    },
    NotUtf8 {
        program: String,
    },
    Empty {
        program: String,
    },
    Unusable {
        program: String,
    },
    TooMuchOutput {
        program: String,
        limit: usize,
    },
}
Expand description

Why a configured api_key_command did not produce a usable credential.

Debug is derived, which is safe only because no variant carries captured output. Adding one that did would put a credential into {:?}.

Variants§

§

NoProgram

Reachable only from a hand-built LlmConfig: config::load rejects api_key_command = [] for an enabled entry. Checked anyway, because a panic inside the commit gate is a worse failure than a message.

§

NotFound

Distinguished from Self::Spawn because the fix is different: this one is a typo in argv[0] or a helper that is not installed, and reporting it as “could not be started: No such file or directory” sends the reader looking at file permissions instead.

Fields

§program: String
§

Spawn

Fields

§program: String
§cause: Error
§

Timeout

Fields

§program: String
§secs: u64
§

Signal

A helper killed by a signal has no exit code, so it cannot be reported through Self::Failed without inventing one.

Fields

§program: String
§

Failed

The status and nothing else. See the module doc: captured output is where a credential would escape.

Fields

§program: String
§code: i32
§

NotUtf8

Fields

§program: String
§

Empty

An empty credential satisfies every “is a key present” check downstream and then 401s, which reads as a rejected key rather than a helper that printed nothing. AuthStore::set refuses an empty paste for the same reason.

Fields

§program: String
§

Unusable

The resolved value becomes an HTTP header, which cannot carry a control character - so a helper that printed two lines, or a diagnostic banner followed by the token, is a guaranteed transport failure. Caught here rather than on the first file of the first push, exactly as AuthStore::set catches it at the prompt.

Fields

§program: String
§

TooMuchOutput

The helper printed more than any credential can be.

A ceiling rather than an unbounded read, for the reason crate::http’s module doc gives: a bound is a safety property, and the failure it names there is a second reader next to a bounded one that kept calling text() with no ceiling at all. This is the third spawn site in the crate and the first with a ceiling, so the doctrine is applied here rather than argued about: an api_key_command pointed at the wrong program - cat on a large file is one keystroke from cat on a token file - would otherwise allocate whatever it printed inside the commit gate, then walk all of it twice to trim it and scan it for control characters.

Reported rather than truncated. Truncating would hand the endpoint a prefix of something that was never a credential and turn a local misconfiguration into a 401 per file.

Fields

§program: String
§limit: usize

Trait Implementations§

Source§

impl Debug for KeyCommandError

Source§

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

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

impl Display for KeyCommandError

Source§

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

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

impl Error for KeyCommandError

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