diff --git a/actix-web/src/data.rs b/actix-web/src/data.rs index 423dd598c..e5b34823c 100644 --- a/actix-web/src/data.rs +++ b/actix-web/src/data.rs @@ -3,7 +3,7 @@ use std::{any::type_name, ops::Deref, sync::Arc}; use actix_http::Extensions; use actix_utils::future::{err, ok, Ready}; use futures_core::future::LocalBoxFuture; -use serde::Serialize; +use serde::{Deserialize, Deserializer, Serialize}; use crate::{dev::Payload, error, Error, FromRequest, HttpRequest}; @@ -127,6 +127,11 @@ impl From> for Data { Data(arc) } } +impl Default for Data { + fn default() -> Self { + Data::new(T::default()) + } +} impl Serialize for Data where @@ -139,6 +144,17 @@ where self.0.serialize(serializer) } } +impl<'de, T> Deserialize<'de> for Data + where + T: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Ok(Data::new(T::deserialize(deserializer)?)) + } +} impl FromRequest for Data { type Error = Error;