zebra_chain/parameters/network/
magic.rs
1use std::fmt;
4
5use crate::parameters::{constants::magics, Network};
6
7#[cfg(any(test, feature = "proptest-impl"))]
8use proptest_derive::Arbitrary;
9
10#[derive(Copy, Clone, Eq, PartialEq)]
12#[cfg_attr(any(test, feature = "proptest-impl"), derive(Arbitrary))]
13pub struct Magic(pub [u8; 4]);
14
15impl fmt::Debug for Magic {
16 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17 f.debug_tuple("Magic").field(&hex::encode(self.0)).finish()
18 }
19}
20
21impl Network {
22 pub fn magic(&self) -> Magic {
24 match self {
25 Network::Mainnet => magics::MAINNET,
26 Network::Testnet(params) => params.network_magic(),
27 }
28 }
29}
30
31#[cfg(test)]
32mod magic_proptest {
33
34 use proptest::prelude::*;
35
36 use super::{magics, Magic};
37
38 #[test]
39 fn magic_debug() {
40 let _init_guard = zebra_test::init();
41
42 assert_eq!(format!("{:?}", magics::MAINNET), "Magic(\"24e92764\")");
43 assert_eq!(format!("{:?}", magics::TESTNET), "Magic(\"fa1af9bf\")");
44 assert_eq!(format!("{:?}", magics::REGTEST), "Magic(\"aae83f5f\")");
45 }
46
47 proptest! {
48
49 #[test]
50 fn proptest_magic_from_array(data in any::<[u8; 4]>()) {
51 let _init_guard = zebra_test::init();
52
53 assert_eq!(format!("{:?}", Magic(data)), format!("Magic({:x?})", hex::encode(data)));
54 }
55 }
56}