oparl_types/
sha1_sum.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
6#[serde_with::serde_as]
7#[derive(
8    Debug,
9    Clone,
10    PartialEq,
11    Eq,
12    Hash,
13    derive_more::AsRef,
14    derive_more::From,
15    derive_more::Into,
16    serde::Serialize,
17    serde::Deserialize,
18)]
19pub struct Sha1Sum(#[serde_as(as = "serde_with::hex::Hex")] [u8; 20]);
20
21#[cfg(test)]
22mod serde_tests {
23    use super::Sha1Sum;
24
25    use pretty_assertions::assert_eq;
26    use serde_json::json;
27
28    fn example_sha1_sum() -> Sha1Sum {
29        Sha1Sum([
30            0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d, 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60,
31            0x18, 0x90, 0xaf, 0xd8, 0x07, 0x09,
32        ])
33    }
34
35    fn example_sha1_sum_json() -> serde_json::Value {
36        json!("da39a3ee5e6b4b0d3255bfef95601890afd80709")
37    }
38
39    #[test]
40    fn serialize() {
41        assert_eq!(json!(example_sha1_sum()), example_sha1_sum_json());
42    }
43
44    #[test]
45    fn deserialize_good() {
46        let deserialized: Sha1Sum = serde_json::from_value(example_sha1_sum_json())
47            .expect("value must be deserializable as sha1sum");
48        assert_eq!(deserialized, example_sha1_sum());
49    }
50
51    #[test]
52    fn deserialize_bad() {
53        assert!(serde_json::from_value::<Sha1Sum>(json!(
54            "da39a3ee5e6b4b0d3255bfef95601890afd8070"
55        ))
56        .is_err());
57        assert!(serde_json::from_value::<Sha1Sum>(json!(
58            "da39a3ee5e6b4b0d3255bfef95601890afd80709a"
59        ))
60        .is_err());
61        assert!(serde_json::from_value::<Sha1Sum>(json!(
62            "da39a3ee5e6b4b0d3255bfef95601890afd8070x"
63        ))
64        .is_err());
65        assert!(serde_json::from_value::<Sha1Sum>(json!("xyzabcd")).is_err());
66        assert!(serde_json::from_value::<Sha1Sum>(json!(true)).is_err());
67        assert!(serde_json::from_value::<Sha1Sum>(json!(123)).is_err());
68    }
69}