schema_org_types/schemas/data_types/
time.rs

1use super::*;
2/// <https://schema.org/Time>
3#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct Time(pub crate::date_types::Time);
6impl std::ops::Deref for Time {
7	type Target = crate::date_types::Time;
8	fn deref(&self) -> &Self::Target {
9		&self.0
10	}
11}
12#[cfg(feature = "serde")]
13mod serde {
14	use std::{fmt, fmt::Formatter};
15
16	use ::serde::{
17		de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
18	};
19
20	use super::*;
21	impl Serialize for Time {
22		fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23		where
24			S: Serializer,
25		{
26			serializer.serialize_newtype_struct("Time", {
27				struct SerializeWith<'a>(&'a crate::date_types::Time);
28				impl<'a> Serialize for SerializeWith<'a> {
29					fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30					where
31						S: Serializer,
32					{
33						serde_with::As::<serde_with::DisplayFromStr>::serialize(self.0, serializer)
34					}
35				}
36				&SerializeWith(&self.0)
37			})
38		}
39	}
40	impl<'de> Deserialize<'de> for Time {
41		fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
42		where
43			D: Deserializer<'de>,
44		{
45			struct DataTypeVisitor;
46			impl<'de> Visitor<'de> for DataTypeVisitor {
47				type Value = Time;
48				fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
49					formatter.write_str("schema.org schema Time")
50				}
51				fn visit_newtype_struct<E>(self, e: E) -> Result<Self::Value, E::Error>
52				where
53					E: Deserializer<'de>,
54				{
55					let inner: crate::date_types::Time =
56						serde_with::As::<serde_with::DisplayFromStr>::deserialize(e)?;
57					Ok(Time(inner))
58				}
59			}
60			Deserializer::deserialize_newtype_struct(deserializer, "Time", DataTypeVisitor)
61		}
62	}
63}