pub enum Refusal {
Admission,
Cap,
Policy,
}Expand description
Why a transfer was turned away, in the three words an operator can act on differently.
Deliberately three and not the gate’s six. gunnar_ssh::Refusal has six
variants because the admission gate has six ceilings, and which of them was
hit is an operator’s question about the BOX. A tenant’s question is a
different one — is the server busy, am I over my plan, or am I not allowed
— and those are three answers. The six-way detail stays where it is, on the
gate’s own AdmissionStats and in the admission-* reason on the log line.
Variants§
Admission
The box was full. Every gunnar_ssh::Refusal variant: the gate is at
capacity, the principal’s share is spent, a lane is full, the anonymous
ceiling is reached, the keyed reserve is held, the memory budget is
spent. Nothing about the tenant is wrong; the server said “not now”.
Cap
The plan said no before a byte. PlanGate::pack_quota refusing a
namespace already at its pack_bytes cap, and the LFS allowance
refusing an upload past lfs_bytes. This is the one an invoice can fix.
Policy
The push gate said no. A protected ref, a required review, a
signature that did not verify — gunnar_policy’s verdict. Nothing an
invoice can fix and nothing the operator should page about.
Implementations§
Trait Implementations§
impl Copy for Refusal
impl Eq for Refusal
Source§impl Ord for Refusal
impl Ord for Refusal
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialOrd for Refusal
impl PartialOrd for Refusal
impl StructuralPartialEq for Refusal
Auto Trait Implementations§
impl Freeze for Refusal
impl RefUnwindSafe for Refusal
impl Send for Refusal
impl Sync for Refusal
impl Unpin for Refusal
impl UnsafeUnpin for Refusal
impl UnwindSafe for Refusal
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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.