AppError

Enum AppError 

Source
pub enum AppError {
Show 34 variants NotFound, Gone, Forbidden, Conflict, FileEmpty, FilenameEmpty, FilenameTooLong, InvalidFilename, GzipDecodeFailed, InvalidTtlValue, TtlTooLow, TtlTooHigh, MissingFileField, PublicUrlNotConfigured, InvalidIdFormat, TusMissingLength, TusMissingOffset, TusOffsetMismatch, TusSessionNotFound, TusStagingError, PayloadTooLarge, RateLimited, JuicehostUnreachable(String), JuicehostRejected(String), InsufficientStorage(String), JuicehostDeleteFailed(String), JuicehostRenameFailed(String), FilesystemError(Error), DatabaseError(Error), DbPoolError(String), TaskPanicked(String), BadRequest(String), InvalidMultipart(String), Internal(String),
}
Expand description

Every error the app can return. Each variant maps to an HTTP status code and a JSON body with an error code and a message.

Variants§

§

NotFound

§

Gone

§

Forbidden

§

Conflict

§

FileEmpty

File payload is empty (0 bytes after decompression)

§

FilenameEmpty

Filename is empty after sanitisation

§

FilenameTooLong

Original filename exceeds 255 characters

§

InvalidFilename

Filename contains invalid characters (sanitised away entirely)

§

GzipDecodeFailed

Upload body claims gzip but decompression failed

§

InvalidTtlValue

TTL value could not be parsed from the request

§

TtlTooLow

TTL is below the minimum allowed

§

TtlTooHigh

TTL is above the maximum allowed

§

MissingFileField

No file field was present in the multipart upload

§

PublicUrlNotConfigured

The public_base_url config is empty and a URL cannot be generated

§

InvalidIdFormat

File ID contains invalid characters

§

TusMissingLength

Upload-Length header missing or unparseable

§

TusMissingOffset

Upload-Offset header missing or unparseable

§

TusOffsetMismatch

Client-supplied offset does not match server state

§

TusSessionNotFound

TUS upload session not found

§

TusStagingError

Failed to create the staging file for a new TUS upload

§

PayloadTooLarge

§

RateLimited

§

JuicehostUnreachable(String)

Cannot reach juicehost at all (connection refused / dns)

§

JuicehostRejected(String)

juicehost returned a non-2xx status

§

InsufficientStorage(String)

juicehost returned 507, disk is full

§

JuicehostDeleteFailed(String)

juicehost delete returned an error

§

JuicehostRenameFailed(String)

juicehost rename returned an error

§

FilesystemError(Error)

§

DatabaseError(Error)

§

DbPoolError(String)

Could not acquire a connection from the database pool

§

TaskPanicked(String)

A background task (spawn_blocking) panicked

§

BadRequest(String)

§

InvalidMultipart(String)

§

Internal(String)

Trait Implementations§

Source§

impl Debug for AppError

Source§

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

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

impl From<Error> for AppError

Source§

fn from(err: Error) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for AppError

Source§

fn from(err: Error) -> Self

Converts to this type from the input type.
Source§

impl IntoResponse for AppError

Source§

fn into_response(self) -> Response

Create a response.

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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.

§

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

§

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
§

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, 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,