use ex3_serde::{bincode, cbor};
use serde::{Deserialize, Serialize};
use ex3_node_error::OtherError;
use crate::{AssetAmount, AssetId, BlockHeight};
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Hash)]
pub struct DepositIdentifier {
pub asset_id: AssetId,
pub block_height: BlockHeight,
pub tx_id: Option<String>,
}
impl DepositIdentifier {
pub fn encode(&self) -> Vec<u8> {
bincode::serialize(&(&self.asset_id, &self.block_height, &self.tx_id)).unwrap()
}
pub fn decode(bytes: &[u8]) -> Result<Self, OtherError> {
let (asset_id, block_height, tx_id) = bincode::deserialize(bytes)
.map_err(|e| OtherError::new(format!("deserialize error: {}", e)))?;
Ok(DepositIdentifier {
asset_id,
block_height,
tx_id,
})
}
}
#[derive(Deserialize, Serialize, Debug, Clone, Eq, PartialEq)]
pub struct Deposit {
pub identifier: DepositIdentifier,
pub amount: AssetAmount,
}
impl Deposit {
pub fn encode(&self) -> Vec<u8> {
bincode::serialize(&(&self.identifier, &self.amount)).unwrap()
}
pub fn decode(bytes: &[u8]) -> Result<Self, OtherError> {
let (identifier, amount) = bincode::deserialize(bytes)
.map_err(|e| OtherError::new(format!("deserialize error: {}", e)))?;
Ok(Deposit { identifier, amount })
}
pub fn cbor_encode(&self) -> Vec<u8> {
cbor::serialize(&(&self.identifier, &self.amount)).unwrap()
}
pub fn cbor_decode(bytes: &[u8]) -> Result<Self, OtherError> {
let (identifier, amount) = cbor::deserialize(bytes)
.map_err(|e| OtherError::new(format!("deserialize error: {}", e)))?;
Ok(Deposit { identifier, amount })
}
}