1#[derive(
7 Debug,
8 Clone,
9 PartialEq,
10 Eq,
11 PartialOrd,
12 Ord,
13 Hash,
14 derive_more::AsRef,
15 derive_more::Display,
16 derive_more::From,
17 derive_more::FromStr,
18 derive_more::Into,
19 serde::Serialize,
20 serde::Deserialize,
21)]
22#[cfg_attr(feature = "sea-orm", derive(sea_orm::DeriveValueType))]
23pub struct Name(String);
24
25impl From<&str> for Name {
26 fn from(value: &str) -> Self {
27 Self(value.into())
28 }
29}
30
31impl Name {
32 pub fn as_str(&self) -> &str {
33 self.0.as_str()
34 }
35}
36
37#[cfg(feature = "sea-orm")]
38mod sea_orm_impls {
39 use sea_orm::{ActiveValue, IntoActiveValue};
40
41 use super::Name;
42
43 impl IntoActiveValue<Name> for Name {
44 fn into_active_value(self) -> ActiveValue<Name> {
45 ActiveValue::Set(self)
46 }
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use pretty_assertions::assert_eq;
53
54 use super::Name;
55
56 #[test]
57 fn from_str() {
58 assert_eq!(
59 Name("Beispiel-System".to_string()),
60 "Beispiel-System"
61 .parse()
62 .expect("value must be a parseable name")
63 );
64 }
65}
66
67#[cfg(test)]
68mod serde_tests {
69 use pretty_assertions::assert_eq;
70 use serde_json::json;
71
72 use super::Name;
73
74 #[test]
75 fn serialize() {
76 assert_eq!(
77 json!(Name("Beispiel-System".to_string())),
78 json!("Beispiel-System")
79 );
80 }
81
82 #[test]
83 fn deserialize_good() {
84 let deserialized: Name = serde_json::from_value(json!("Beispiel-System"))
85 .expect("value must be deserializable as Name");
86 assert_eq!(deserialized, Name::from("Beispiel-System"));
87 }
88
89 #[test]
90 fn deserialize_bad() {
91 assert!(serde_json::from_value::<Name>(json!([])).is_err());
92 assert!(serde_json::from_value::<Name>(json!({})).is_err());
93 assert!(serde_json::from_value::<Name>(json!(true)).is_err());
94 assert!(serde_json::from_value::<Name>(json!(123)).is_err());
95 }
96}