bitcoin_internals/
serde.rs1#[doc(hidden)]
4pub use serde::{de, ser, Deserialize, Deserializer, Serialize, Serializer};
5
6#[macro_export]
10macro_rules! serde_string_serialize_impl {
11 ($name:ty, $expecting:literal) => {
12 impl $crate::serde::Serialize for $name {
13 fn serialize<S>(&self, serializer: S) -> core::result::Result<S::Ok, S::Error>
14 where
15 S: $crate::serde::Serializer,
16 {
17 serializer.collect_str(&self)
18 }
19 }
20 };
21}
22
23#[macro_export]
27macro_rules! serde_string_deserialize_impl {
28 ($name:ty, $expecting:literal) => {
29 impl<'de> $crate::serde::Deserialize<'de> for $name {
30 fn deserialize<D>(deserializer: D) -> core::result::Result<$name, D::Error>
31 where
32 D: $crate::serde::de::Deserializer<'de>,
33 {
34 use core::fmt::Formatter;
35
36 struct Visitor;
37 impl<'de> $crate::serde::de::Visitor<'de> for Visitor {
38 type Value = $name;
39
40 fn expecting(&self, f: &mut Formatter) -> core::fmt::Result {
41 f.write_str($expecting)
42 }
43
44 fn visit_str<E>(self, v: &str) -> core::result::Result<Self::Value, E>
45 where
46 E: $crate::serde::de::Error,
47 {
48 v.parse::<$name>().map_err(E::custom)
49 }
50 }
51
52 deserializer.deserialize_str(Visitor)
53 }
54 }
55 };
56}
57
58#[macro_export]
62macro_rules! serde_string_impl {
63 ($name:ty, $expecting:literal) => {
64 $crate::serde_string_deserialize_impl!($name, $expecting);
65 $crate::serde_string_serialize_impl!($name, $expecting);
66 };
67}