Ensure error is Send

This commit is contained in:
asonix 2023-06-01 17:16:23 -05:00
parent 1be6074cf4
commit 46e5834b60
2 changed files with 65 additions and 7 deletions

View file

@ -1,7 +1,7 @@
[package]
name = "actix-form-data"
description = "Multipart Form Data for Actix Web"
version = "0.7.0-beta.1"
version = "0.7.0-beta.2"
license = "GPL-3.0"
authors = ["asonix <asonix@asonix.dog>"]
repository = "https://git.asonix.dog/asonix/actix-form-data.git"

View file

@ -22,9 +22,8 @@ use std::{
string::FromUtf8Error,
};
use actix_multipart::MultipartError;
use actix_web::{
error::{PayloadError, ResponseError},
error::{PayloadError, ResponseError, ParseError},
http::StatusCode,
HttpResponse,
};
@ -34,7 +33,7 @@ pub enum Error {
#[error("Error parsing payload")]
Payload(#[from] PayloadError),
#[error("Error in multipart creation")]
Multipart(MultipartError),
Multipart(#[from] MultipartError),
#[error("Failed to parse field")]
ParseField(#[from] FromUtf8Error),
#[error("Failed to parse int")]
@ -61,9 +60,57 @@ pub enum Error {
FileSize,
}
impl From<MultipartError> for Error {
fn from(m: MultipartError) -> Self {
Error::Multipart(m)
#[derive(Debug, thiserror::Error)]
pub enum MultipartError {
#[error("No Content-Disposition `form-data` header")]
NoContentDisposition,
#[error("No Content-Type header found")]
NoContentType,
#[error("Cannot parse Content-Type header")]
ParseContentType,
#[error("Multipart boundary is not found")]
Boundary,
#[error("Nested multipart is not supported")]
Nested,
#[error("Multipart stream is incomplete")]
Incomplete,
#[error("Failed parsing")]
Parse(#[source] ParseError),
#[error("Multipart stream is not consumed")]
NotConsumed,
#[error("An error occured processing field `{field_name}`: `{zource}`")]
Field {
field_name: String,
zource: String,
},
#[error("Duplicate field found for: `{0}")]
DuplicateField(String),
#[error("Field with name `{0}` is required")]
MissingField(String),
#[error("Unsupported field `{0}`")]
UnsupportedField(String),
#[error("Unknown error occured: {0}")]
Unknown(String),
}
impl From<actix_multipart::MultipartError> for Error {
fn from(value: actix_multipart::MultipartError) -> Self {
match value {
actix_multipart::MultipartError::NoContentDisposition => Error::Multipart(MultipartError::NoContentDisposition),
actix_multipart::MultipartError::NoContentType => Error::Multipart(MultipartError::NoContentType),
actix_multipart::MultipartError::ParseContentType => Error::Multipart(MultipartError::ParseContentType),
actix_multipart::MultipartError::Boundary => Error::Multipart(MultipartError::Boundary),
actix_multipart::MultipartError::Nested => Error::Multipart(MultipartError::Nested),
actix_multipart::MultipartError::Incomplete => Error::Multipart(MultipartError::Incomplete),
actix_multipart::MultipartError::Parse(e) => Error::Multipart(MultipartError::Parse(e)),
actix_multipart::MultipartError::Payload(e) => Error::Payload(e),
actix_multipart::MultipartError::NotConsumed => Error::Multipart(MultipartError::NotConsumed),
actix_multipart::MultipartError::Field { field_name, source } => Error::Multipart(MultipartError::Field { field_name, zource: source.to_string() }),
actix_multipart::MultipartError::DuplicateField(s) => Error::Multipart(MultipartError::DuplicateField(s)),
actix_multipart::MultipartError::MissingField(s) => Error::Multipart(MultipartError::MissingField(s)),
actix_multipart::MultipartError::UnsupportedField(s) => Error::Multipart(MultipartError::UnsupportedField(s)),
e => Error::Multipart(MultipartError::Unknown(e.to_string())),
}
}
}
@ -94,3 +141,14 @@ impl ResponseError for Error {
}
}
}
#[cfg(test)]
mod tests {
use super::Error;
#[test]
fn assert_send() {
fn is_send<E: Send>() {}
is_send::<Error>();
}
}