Merge rust-bitcoin/rust-bitcoin#1523: Fix LeafVersion serde
a400757676
Add failing tests from serde-json (sanket1729)b3246bf73f
Fix LeafVersion serde (sanket1729) Pull request description: The default implementation maps to visit_u64. The current implementation does not roundtrip with many deserializers, including serde_json. See the failing test in the second commit ACKs for top commit: Kixunil: tACKa400757676
tcharding: ACKa400757676
Tree-SHA512: a6307b799b0bb4af398addc9ddbff0d811b632d1cc6ab4bdd77aaf3f151e48dd1cd10e3f90a71ef8fc3feb1cd988f7a719f92ec745b5fdf2ae0f0ad97ab2fa10
This commit is contained in:
commit
cc1e6c02c8
|
@ -944,10 +944,16 @@ impl<'de> serde::Deserialize<'de> for LeafVersion {
|
|||
formatter.write_str("a valid consensus-encoded taproot leaf version")
|
||||
}
|
||||
|
||||
fn visit_u8<E>(self, value: u8) -> Result<Self::Value, E>
|
||||
fn visit_u64<E>(self, value: u64) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
let value = u8::try_from(value).map_err(|_| {
|
||||
E::invalid_value(
|
||||
serde::de::Unexpected::Unsigned(value),
|
||||
&"consensus-encoded leaf version as u8",
|
||||
)
|
||||
})?;
|
||||
LeafVersion::from_consensus(value).map_err(|_| {
|
||||
E::invalid_value(
|
||||
::serde::de::Unexpected::Unsigned(value as u64),
|
||||
|
@ -1098,6 +1104,9 @@ mod test {
|
|||
use crate::{Address, Network};
|
||||
extern crate serde_json;
|
||||
|
||||
#[cfg(feature = "serde")]
|
||||
use serde_test::{assert_tokens, Token};
|
||||
|
||||
fn tag_engine(tag_name: &str) -> sha256::HashEngine {
|
||||
let mut engine = sha256::Hash::engine();
|
||||
let tag_hash = sha256::Hash::hash(tag_name.as_bytes());
|
||||
|
@ -1351,6 +1360,18 @@ mod test {
|
|||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(feature = "serde")]
|
||||
fn test_leaf_version_serde() {
|
||||
let leaf_version = LeafVersion::TapScript;
|
||||
// use serde_test to test serialization and deserialization
|
||||
assert_tokens(&leaf_version, &[Token::U8(192)]);
|
||||
|
||||
let json = serde_json::to_string(&leaf_version).unwrap();
|
||||
let leaf_version2 = serde_json::from_str(&json).unwrap();
|
||||
assert_eq!(leaf_version, leaf_version2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn bip_341_tests() {
|
||||
fn process_script_trees(
|
||||
|
|
Loading…
Reference in New Issue