Merge rust-bitcoin/rust-bitcoin#1785: Implement serde::Serialize for Address
ed6421c939
address: Add generic serde::Serialize for Address (Steven Roose)814b9917da
address: Add Sync, Send, Sized and UnPin marker traits on NetworkValidation (Steven Roose) Pull request description: With the new rewrite of Address, `serde::Serialize` is only implemented on `Address<bitcoin::address::NetworkChecked>` and `Address<bitcoin::address::NetworkUnchecked>`. But the compiler has no way of knowing that that are all the possible versions of `Address`, so the generic `Address<impl bitcoin::address::NetworkValidation>` doesn't implement `serde::Serialize`. ACKs for top commit: Kixunil: ACKed6421c939
tcharding: ACKed6421c939
Tree-SHA512: 65e43dff244c94fe08ccb2d985781a2687a1e2db186960a35d4ae89f3b31c5af66892630a3ebaac9cecdc83638487425afa17374869d278648b348869e0ba091
This commit is contained in:
commit
1abbed2129
|
@ -615,7 +615,7 @@ mod sealed {
|
||||||
|
|
||||||
/// Marker of status of address's network validation. See section [*Parsing addresses*](Address#parsing-addresses)
|
/// Marker of status of address's network validation. See section [*Parsing addresses*](Address#parsing-addresses)
|
||||||
/// on [`Address`] for details.
|
/// on [`Address`] for details.
|
||||||
pub trait NetworkValidation: sealed::NetworkValidation {
|
pub trait NetworkValidation: sealed::NetworkValidation + Sync + Send + Sized + Unpin {
|
||||||
/// Indicates whether this `NetworkValidation` is `NetworkChecked` or not.
|
/// Indicates whether this `NetworkValidation` is `NetworkChecked` or not.
|
||||||
const IS_CHECKED: bool;
|
const IS_CHECKED: bool;
|
||||||
}
|
}
|
||||||
|
@ -747,21 +747,18 @@ where
|
||||||
V: NetworkValidation;
|
V: NetworkValidation;
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
struct DisplayUnchecked<'a>(&'a Address<NetworkUnchecked>);
|
struct DisplayUnchecked<'a, N: NetworkValidation>(&'a Address<N>);
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
impl fmt::Display for DisplayUnchecked<'_> {
|
impl<N: NetworkValidation> fmt::Display for DisplayUnchecked<'_, N> {
|
||||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { self.0.fmt_internal(fmt) }
|
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { self.0.fmt_internal(fmt) }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
|
||||||
crate::serde_utils::serde_string_serialize_impl!(Address, "a Bitcoin address");
|
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
crate::serde_utils::serde_string_deserialize_impl!(Address<NetworkUnchecked>, "a Bitcoin address");
|
crate::serde_utils::serde_string_deserialize_impl!(Address<NetworkUnchecked>, "a Bitcoin address");
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
impl serde::Serialize for Address<NetworkUnchecked> {
|
impl<N: NetworkValidation> serde::Serialize for Address<N> {
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
where
|
where
|
||||||
S: serde::Serializer,
|
S: serde::Serializer,
|
||||||
|
|
Loading…
Reference in New Issue