mithril_common/messages/
cardano_database_digest_list.rs

1use serde::{Deserialize, Serialize};
2
3use crate::entities::{HexEncodedDigest, ImmutableFileName};
4
5/// Message structure of a Cardano database digests list
6pub type CardanoDatabaseDigestListMessage = Vec<CardanoDatabaseDigestListItemMessage>;
7
8/// Message structure of a Cardano database digest list item
9#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
10pub struct CardanoDatabaseDigestListItemMessage {
11    /// Immutable file name
12    pub immutable_file_name: ImmutableFileName,
13
14    /// Digest of an immutable file
15    pub digest: HexEncodedDigest,
16}
17
18impl CardanoDatabaseDigestListItemMessage {
19    /// Return a dummy test entity (test-only).
20    pub fn dummy() -> Self {
21        Self {
22            immutable_file_name: "06685.chunk".to_string(),
23            digest: "0af556ab2620dd9363bf76963a231abe8948a500ea6be31b131d87907ab09b1e".to_string(),
24        }
25    }
26}
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31
32    const CURRENT_JSON: &str = r#"
33    [
34        {
35            "immutable_file_name": "06685.chunk",
36            "digest": "0af556ab2620dd9363bf76963a231abe8948a500ea6be31b131d87907ab09b1e"
37        }
38    ]"#;
39
40    fn golden_current_message() -> CardanoDatabaseDigestListMessage {
41        vec![CardanoDatabaseDigestListItemMessage {
42            immutable_file_name: "06685.chunk".to_string(),
43            digest: "0af556ab2620dd9363bf76963a231abe8948a500ea6be31b131d87907ab09b1e".to_string(),
44        }]
45    }
46
47    #[test]
48    fn test_current_json_deserialized_into_current_message() {
49        let json = CURRENT_JSON;
50        let message: CardanoDatabaseDigestListMessage = serde_json::from_str(json).expect(
51            "This JSON is expected to be successfully parsed into a CardanoDatabaseDigestListMessage instance.",
52        );
53
54        assert_eq!(golden_current_message(), message);
55    }
56}