Skip to main content

oparl_types/
system_url.rs

1// SPDX-FileCopyrightText: Politik im Blick developers
2// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
3//
4// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2
5
6use 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}