pub enum RefreshFailureKind {
Cooldown {
retry_in_secs: u64,
},
LockBusy,
Transient,
Credential,
Other,
ActionRequired,
}Expand description
Why a locked refresh produced no token, so callers can tell the user
the right thing: only RefreshFailureKind::Credential means the login
itself is unusable (“run synaps login”).
Variants§
Cooldown
A forced (401-driven) refresh was refused by the per-account
[FORCED_REFRESH_COOLDOWN].
LockBusy
Another refresh of this account (this process or another) did not finish within the lock wait.
Transient
The provider exchange failed for a transient reason: network, a timeout, or a 5xx / 429 from the token endpoint.
Credential
The stored credential is missing, removed or rejected by the provider.
Other
Local failure (lock file I/O, the refresh task itself).
ActionRequired
The user must act outside synaps (a corrupt credential store, a provider billing requirement); the message says exactly what. Not retryable, and logging in again does not help.
Implementations§
Source§impl RefreshFailureKind
impl RefreshFailureKind
Sourcepub fn is_retryable(self) -> bool
pub fn is_retryable(self) -> bool
Retrying later can succeed without the user doing anything: a transient provider/network failure, a busy refresh lock, or a local failure. The single definition the broker and the runtime share.
Trait Implementations§
Source§impl Clone for RefreshFailureKind
impl Clone for RefreshFailureKind
Source§fn clone(&self) -> RefreshFailureKind
fn clone(&self) -> RefreshFailureKind
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for RefreshFailureKind
Source§impl Debug for RefreshFailureKind
impl Debug for RefreshFailureKind
impl Eq for RefreshFailureKind
Source§impl PartialEq for RefreshFailureKind
impl PartialEq for RefreshFailureKind
impl StructuralPartialEq for RefreshFailureKind
Auto Trait Implementations§
impl Freeze for RefreshFailureKind
impl RefUnwindSafe for RefreshFailureKind
impl Send for RefreshFailureKind
impl Sync for RefreshFailureKind
impl Unpin for RefreshFailureKind
impl UnsafeUnpin for RefreshFailureKind
impl UnwindSafe for RefreshFailureKind
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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 more