Skip to content

Commit

Permalink
Merge pull request #87 from BP-WG/v0.11
Browse files Browse the repository at this point in the history
Custom serde string serialization for Terminal
  • Loading branch information
dr-orlovsky authored May 6, 2024
2 parents a0d29f2 + ff27556 commit 46b6b9a
Showing 1 changed file with 33 additions and 5 deletions.
38 changes: 33 additions & 5 deletions dbc/src/tapret/tapscript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,6 @@ pub const TAPRET_SCRIPT_COMMITMENT_PREFIX: [u8; 31] = [
#[derive(Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_BPCORE)]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(crate = "serde_crate", rename_all = "camelCase")
)]
pub struct TapretCommitment {
/// LNPBP-4 multi-protocol commitment.
pub mpc: mpc::Commitment,
Expand Down Expand Up @@ -120,6 +115,39 @@ impl CommitVerify<TapretCommitment, TapretFirst> for TapScript {
}
}

#[cfg(feature = "serde")]
mod _serde {
use amplify::{Bytes, Wrapper};
use serde_crate::de::Error;
use serde_crate::{Deserialize, Deserializer, Serialize, Serializer};

use super::*;

impl Serialize for TapretCommitment {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer {
if serializer.is_human_readable() {
self.to_string().serialize(serializer)
} else {
self.to_vec().serialize(serializer)
}
}
}

impl<'de> Deserialize<'de> for TapretCommitment {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de> {
if deserializer.is_human_readable() {
let s = String::deserialize(deserializer)?;
Self::from_str(&s).map_err(D::Error::custom)
} else {
let slice = Bytes::<33>::deserialize(deserializer)?;
Ok(Self::from(slice.into_inner()))
}
}
}
}

#[cfg(test)]
mod test {
use amplify::ByteArray;
Expand Down

0 comments on commit 46b6b9a

Please sign in to comment.