schema_org_types/schemas/enumerations/
digital_document_permission_type.rs

1/// <https://schema.org/DigitalDocumentPermissionType>
2#[cfg_attr(feature = "derive-debug", derive(Debug))]
3#[cfg_attr(feature = "derive-clone", derive(Clone))]
4pub enum DigitalDocumentPermissionType {
5	/// <https://schema.org/CommentPermission>
6	CommentPermission,
7	/// <https://schema.org/ReadPermission>
8	ReadPermission,
9	/// <https://schema.org/WritePermission>
10	WritePermission,
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 DigitalDocumentPermissionType {
22		fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23		where
24			S: Serializer,
25		{
26			match *self {
27				DigitalDocumentPermissionType::CommentPermission => serializer
28					.serialize_unit_variant(
29						"DigitalDocumentPermissionType",
30						0u32,
31						"CommentPermission",
32					),
33				DigitalDocumentPermissionType::ReadPermission => serializer.serialize_unit_variant(
34					"DigitalDocumentPermissionType",
35					1u32,
36					"ReadPermission",
37				),
38				DigitalDocumentPermissionType::WritePermission => serializer
39					.serialize_unit_variant(
40						"DigitalDocumentPermissionType",
41						2u32,
42						"WritePermission",
43					),
44			}
45		}
46	}
47	impl<'de> Deserialize<'de> for DigitalDocumentPermissionType {
48		fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
49		where
50			D: Deserializer<'de>,
51		{
52			enum Field {
53				CommentPermission,
54				ReadPermission,
55				WritePermission,
56			}
57			struct FieldVisitor;
58			impl<'de> de::Visitor<'de> for FieldVisitor {
59				type Value = Field;
60				fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
61					formatter.write_str("variant identifier")
62				}
63				fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
64				where
65					E: de::Error,
66				{
67					match value {
68						"CommentPermission" => Ok(Field::CommentPermission),
69						"ReadPermission" => Ok(Field::ReadPermission),
70						"WritePermission" => Ok(Field::WritePermission),
71						_ => Err(de::Error::unknown_variant(value, VARIANTS)),
72					}
73				}
74				fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
75				where
76					E: de::Error,
77				{
78					match value {
79						b"CommentPermission" => Ok(Field::CommentPermission),
80						b"ReadPermission" => Ok(Field::ReadPermission),
81						b"WritePermission" => Ok(Field::WritePermission),
82						_ => {
83							let value = &String::from_utf8_lossy(value);
84							Err(de::Error::unknown_variant(value, VARIANTS))
85						}
86					}
87				}
88			}
89			impl<'de> Deserialize<'de> for Field {
90				fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
91				where
92					D: Deserializer<'de>,
93				{
94					deserializer.deserialize_identifier(FieldVisitor)
95				}
96			}
97			struct EnumerationVisitor;
98			impl<'de> Visitor<'de> for EnumerationVisitor {
99				type Value = DigitalDocumentPermissionType;
100				fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
101					formatter.write_str("schema.org schema DigitalDocumentPermissionType")
102				}
103				fn visit_enum<A>(self, data: A) -> Result<Self::Value, A::Error>
104				where
105					A: de::EnumAccess<'de>,
106				{
107					match de::EnumAccess::variant::<Field>(data)? {
108						(Field::CommentPermission, variant) => {
109							de::VariantAccess::unit_variant(variant)?;
110							Ok(DigitalDocumentPermissionType::CommentPermission)
111						}
112						(Field::ReadPermission, variant) => {
113							de::VariantAccess::unit_variant(variant)?;
114							Ok(DigitalDocumentPermissionType::ReadPermission)
115						}
116						(Field::WritePermission, variant) => {
117							de::VariantAccess::unit_variant(variant)?;
118							Ok(DigitalDocumentPermissionType::WritePermission)
119						}
120					}
121				}
122			}
123			const VARIANTS: &[&str] = &["CommentPermission", "ReadPermission", "WritePermission"];
124			deserializer.deserialize_enum(
125				"DigitalDocumentPermissionType",
126				VARIANTS,
127				EnumerationVisitor,
128			)
129		}
130	}
131}