1
2use serde::{Deserialize, Deserializer, Serialize, Serializer};
3
4pub mod network_kind {
5 use super::*;
6 use bitcoin::NetworkKind;
7
8 pub fn serialize<S: ::serde::Serializer>(network: &NetworkKind, s: S) -> Result<S::Ok, S::Error> {
9 match network {
10 NetworkKind::Main => s.serialize_str("main"),
11 NetworkKind::Test => s.serialize_str("test"),
12 }
13 }
14
15 pub fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<NetworkKind, D::Error> {
16 use serde::de::Error;
17
18 match <&str>::deserialize(d)? {
19 "main" => Ok(NetworkKind::Main),
20 "test" => Ok(NetworkKind::Test),
21 k => Err(D::Error::custom(format!("unknown network kind: {}", k))),
22 }
23 }
24}
25
26#[derive(Clone, PartialEq, Eq, Debug, Hash)]
28pub struct HexBytes(pub Vec<u8>);
29
30impl HexBytes {
31 pub fn hex(&self) -> String {
32 hex::encode(&self.0)
33 }
34
35 pub fn bytes(&self) -> &[u8] {
36 &self.0
37 }
38
39 pub fn take_bytes(self) -> Vec<u8> {
40 self.0
41 }
42}
43
44impl From<Vec<u8>> for HexBytes {
45 fn from(vec: Vec<u8>) -> HexBytes {
46 HexBytes(vec)
47 }
48}
49
50impl<'a> From<&'a [u8]> for HexBytes {
51 fn from(slice: &'a [u8]) -> HexBytes {
52 HexBytes(slice.to_vec())
53 }
54}
55
56impl Serialize for HexBytes {
57 fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
58 s.serialize_str(&hex::encode(&self.0))
59 }
60}
61
62impl<'de> Deserialize<'de> for HexBytes {
63 fn deserialize<D: Deserializer<'de>>(d: D) -> Result<HexBytes, D::Error> {
64 use serde::de::Error;
65
66 let hex_str = <&str>::deserialize(d)?;
67 Ok(HexBytes(hex::decode(hex_str).map_err(D::Error::custom)?))
68 }
69}