oparl_types/
sha512_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 Sha512Sum(#[serde_as(as = "serde_with::hex::Hex")] [u8; 64]);
20
21#[cfg(test)]
22mod serde_tests {
23    use super::Sha512Sum;
24
25    use pretty_assertions::assert_eq;
26    use serde_json::json;
27
28    fn example_sha512_sum() -> Sha512Sum {
29        Sha512Sum([
30            0xcf, 0x83, 0xe1, 0x35, 0x7e, 0xef, 0xb8, 0xbd, 0xf1, 0x54, 0x28, 0x50, 0xd6, 0x6d,
31            0x80, 0x07, 0xd6, 0x20, 0xe4, 0x05, 0x0b, 0x57, 0x15, 0xdc, 0x83, 0xf4, 0xa9, 0x21,
32            0xd3, 0x6c, 0xe9, 0xce, 0x47, 0xd0, 0xd1, 0x3c, 0x5d, 0x85, 0xf2, 0xb0, 0xff, 0x83,
33            0x18, 0xd2, 0x87, 0x7e, 0xec, 0x2f, 0x63, 0xb9, 0x31, 0xbd, 0x47, 0x41, 0x7a, 0x81,
34            0xa5, 0x38, 0x32, 0x7a, 0xf9, 0x27, 0xda, 0x3e,
35        ])
36    }
37
38    fn example_sha512_sum_json() -> serde_json::Value {
39        json!("cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")
40    }
41
42    #[test]
43    fn serialize() {
44        assert_eq!(json!(example_sha512_sum()), example_sha512_sum_json());
45    }
46
47    #[test]
48    fn deserialize_good() {
49        let deserialized: Sha512Sum = serde_json::from_value(example_sha512_sum_json())
50            .expect("value must be deserializable as sha512sum");
51        assert_eq!(deserialized, example_sha512_sum());
52    }
53
54    #[test]
55    fn deserialize_bad() {
56        assert!(serde_json::from_value::<Sha512Sum>(json!(
57            "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3"
58        ))
59        .is_err());
60        assert!(serde_json::from_value::<Sha512Sum>(json!(
61            "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e0"
62        ))
63        .is_err());
64        assert!(serde_json::from_value::<Sha512Sum>(json!(
65            "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3x"
66        ))
67        .is_err());
68        assert!(serde_json::from_value::<Sha512Sum>(json!("xyzabcd")).is_err());
69        assert!(serde_json::from_value::<Sha512Sum>(json!(true)).is_err());
70        assert!(serde_json::from_value::<Sha512Sum>(json!(123)).is_err());
71    }
72}