mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-24 08:22:59 +01:00
Allow to override Form extractor error
This commit is contained in:
parent
b679b4cabc
commit
748ff389e4
@ -1,6 +1,7 @@
|
|||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::ops::{Deref, DerefMut};
|
use std::ops::{Deref, DerefMut};
|
||||||
use std::{fmt, str};
|
use std::{fmt, str};
|
||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use encoding::all::UTF_8;
|
use encoding::all::UTF_8;
|
||||||
@ -11,7 +12,7 @@ use serde::de::{self, DeserializeOwned};
|
|||||||
use serde_urlencoded;
|
use serde_urlencoded;
|
||||||
|
|
||||||
use de::PathDeserializer;
|
use de::PathDeserializer;
|
||||||
use error::{Error, ErrorBadRequest, ErrorNotFound};
|
use error::{Error, ErrorBadRequest, ErrorNotFound, UrlencodedError};
|
||||||
use handler::{AsyncResult, FromRequest};
|
use handler::{AsyncResult, FromRequest};
|
||||||
use httpmessage::{HttpMessage, MessageBody, UrlEncoded};
|
use httpmessage::{HttpMessage, MessageBody, UrlEncoded};
|
||||||
use httprequest::HttpRequest;
|
use httprequest::HttpRequest;
|
||||||
@ -261,15 +262,17 @@ where
|
|||||||
T: DeserializeOwned + 'static,
|
T: DeserializeOwned + 'static,
|
||||||
S: 'static,
|
S: 'static,
|
||||||
{
|
{
|
||||||
type Config = FormConfig;
|
type Config = FormConfig<S>;
|
||||||
type Result = Box<Future<Item = Self, Error = Error>>;
|
type Result = Box<Future<Item = Self, Error = Error>>;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
|
fn from_request(req: &HttpRequest<S>, cfg: &Self::Config) -> Self::Result {
|
||||||
|
let req = req.clone();
|
||||||
|
let err = Rc::clone(&cfg.ehandler);
|
||||||
Box::new(
|
Box::new(
|
||||||
UrlEncoded::new(req.clone())
|
UrlEncoded::new(req.clone())
|
||||||
.limit(cfg.limit)
|
.limit(cfg.limit)
|
||||||
.from_err()
|
.map_err(move |e| (*err)(e, req))
|
||||||
.map(Form),
|
.map(Form),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -314,21 +317,34 @@ impl<T: fmt::Display> fmt::Display for Form<T> {
|
|||||||
/// );
|
/// );
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
pub struct FormConfig {
|
pub struct FormConfig<S> {
|
||||||
limit: usize,
|
limit: usize,
|
||||||
|
ehandler: Rc<Fn(UrlencodedError, HttpRequest<S>) -> Error>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FormConfig {
|
impl<S> FormConfig<S> {
|
||||||
/// Change max size of payload. By default max size is 256Kb
|
/// Change max size of payload. By default max size is 256Kb
|
||||||
pub fn limit(&mut self, limit: usize) -> &mut Self {
|
pub fn limit(&mut self, limit: usize) -> &mut Self {
|
||||||
self.limit = limit;
|
self.limit = limit;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set custom error handler
|
||||||
|
pub fn error_handler<F>(&mut self, f: F) -> &mut Self
|
||||||
|
where
|
||||||
|
F: Fn(UrlencodedError, HttpRequest<S>) -> Error + 'static,
|
||||||
|
{
|
||||||
|
self.ehandler = Rc::new(f);
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for FormConfig {
|
impl<S> Default for FormConfig<S> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
FormConfig { limit: 262_144 }
|
FormConfig {
|
||||||
|
limit: 262_144,
|
||||||
|
ehandler: Rc::new(|e, _| e.into()),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user