use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum MbChain {
Base,
Arbitrum,
Solana,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct MbWithdraw {
pub chain: MbChain,
pub asset: u32,
pub amount: u64,
pub dst_addr: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn mb_chain_serializes_pascal_case() {
assert_eq!(serde_json::to_string(&MbChain::Base).unwrap(), "\"Base\"");
assert_eq!(
serde_json::to_string(&MbChain::Solana).unwrap(),
"\"Solana\""
);
}
#[test]
fn mb_withdraw_round_trips() {
let a = MbWithdraw {
chain: MbChain::Base,
asset: 0,
amount: 1_000_000,
dst_addr: "0xabababababababababababababababababababab".into(),
};
let j = serde_json::to_value(&a).unwrap();
assert!(j["amount"].is_number(), "amount is a plain integer");
assert_eq!(j["chain"], serde_json::json!("Base"));
let dec: MbWithdraw = serde_json::from_value(j).unwrap();
assert_eq!(a, dec);
}
}