Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use serde::{de::Error, Deserialize, Deserializer}; // 1.0.94
- use serde_json; // 1.0.40
- #[derive(Debug, Deserialize)]
- struct EtheriumTransaction {
- account: Account, // hex
- amount: u64, // decimal
- }
- #[derive(Debug, PartialEq)]
- struct Account(u64);
- impl<'de> Deserialize<'de> for Account {
- fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
- where
- D: Deserializer<'de>,
- {
- let s: &str = Deserialize::deserialize(deserializer)?;
- // do better hex decoding than this
- u64::from_str_radix(&s[2..], 16)
- .map(Account)
- .map_err(D::Error::custom)
- }
- }
- fn main() {
- let raw = r#"{"account": "0xDEADBEEF", "amount": 100}"#;
- let transaction: EtheriumTransaction =
- serde_json::from_str(raw).expect("Couldn't derserialize");
- assert_eq!(transaction.amount, 100);
- assert_eq!(transaction.account, Account(0xDEAD_BEEF));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement