Allow 'T: Deserialize' in JSON, MessagePack forms.

Previously, 'T: DeserializeOwned' was required needlessly. This allowed
'Json' and 'MsgPack' to borrow from the request.
This commit is contained in:
Sergio Benitez 2021-04-16 01:51:31 -07:00
parent 64e46b7107
commit dd0c036461
2 changed files with 4 additions and 6 deletions

View File

@ -24,8 +24,7 @@ use rocket::response::{self, Responder, content};
use rocket::http::Status;
use rocket::form::prelude as form;
use serde::{Serialize, Serializer};
use serde::de::{Deserialize, DeserializeOwned, Deserializer};
use serde::{Serialize, Serializer, Deserialize, Deserializer};
#[doc(hidden)]
pub use serde_json::{json_internal, json_internal_vec};
@ -237,7 +236,7 @@ impl From<JsonError<'_>> for form::Error<'_> {
}
#[rocket::async_trait]
impl<'v, T: DeserializeOwned + Send> form::FromFormField<'v> for Json<T> {
impl<'v, T: Deserialize<'v> + Send> form::FromFormField<'v> for Json<T> {
fn from_value(field: form::ValueField<'v>) -> Result<Self, form::Errors<'v>> {
Ok(Self::from_str(field.value)?)
}

View File

@ -24,8 +24,7 @@ use rocket::response::{self, Responder, content};
use rocket::http::Status;
use rocket::form::prelude as form;
use serde::Serialize;
use serde::de::{Deserialize, DeserializeOwned};
use serde::{Serialize, Deserialize};
pub use rmp_serde::decode::Error;
@ -194,7 +193,7 @@ impl<'r, T: Serialize> Responder<'r, 'static> for MsgPack<T> {
}
#[rocket::async_trait]
impl<'v, T: DeserializeOwned + Send> form::FromFormField<'v> for MsgPack<T> {
impl<'v, T: Deserialize<'v> + Send> form::FromFormField<'v> for MsgPack<T> {
async fn from_data(f: form::DataField<'v, '_>) -> Result<Self, form::Errors<'v>> {
Self::from_data(f.request, f.data).await.map_err(|e| {
match e {