oparl_types/
system_url.rs1use crate::Url;
7
8#[derive(
9 Debug,
10 Clone,
11 PartialEq,
12 Eq,
13 PartialOrd,
14 Ord,
15 Hash,
16 derive_more::AsRef,
17 derive_more::Display,
18 derive_more::From,
19 derive_more::FromStr,
20 derive_more::Into,
21 serde::Serialize,
22 serde::Deserialize,
23)]
24pub struct SystemUrl(Url);
25
26#[cfg(test)]
27mod tests {
28 use pretty_assertions::assert_eq;
29
30 use super::SystemUrl;
31
32 #[test]
33 fn from_str() {
34 assert_eq!(
35 SystemUrl(
36 "https://oparl.example.org/"
37 .parse()
38 .expect("value must be a parseable url")
39 ),
40 "https://oparl.example.org/"
41 .parse()
42 .expect("value must be a parseable id")
43 );
44 }
45}
46
47#[cfg(test)]
48mod serde_tests {
49 use pretty_assertions::assert_eq;
50 use serde_json::json;
51
52 use super::SystemUrl;
53
54 #[test]
55 fn serialize() {
56 assert_eq!(
57 json!(SystemUrl(
58 "https://oparl.example.org/"
59 .parse()
60 .expect("value must be a parseable url")
61 )),
62 json!("https://oparl.example.org/")
63 );
64 }
65
66 #[test]
67 fn deserialize_good() {
68 let deserialized: SystemUrl = serde_json::from_value(json!("https://oparl.example.org/"))
69 .expect("value must be deserializable as SystemId");
70 assert_eq!(
71 deserialized,
72 SystemUrl(
73 "https://oparl.example.org/"
74 .parse()
75 .expect("value must be a parseable url")
76 )
77 );
78 }
79
80 #[test]
81 fn deserialize_bad() {
82 assert!(serde_json::from_value::<SystemUrl>(json!("xyzabcd")).is_err());
83 assert!(serde_json::from_value::<SystemUrl>(json!(true)).is_err());
84 assert!(serde_json::from_value::<SystemUrl>(json!(123)).is_err());
85 }
86}