use serde_with::serde_as;
use time::format_description::well_known::Rfc3339;
use time::OffsetDateTime;
use uuid::Uuid;
#[serde_as]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct HistoryTransactionItem {
#[serde(rename = "amount")]
pub amount: f32,
#[serde(rename = "dateTime")]
#[serde_as(as = "Rfc3339")]
pub date_time: OffsetDateTime,
#[serde(rename = "reference")]
pub reference: Uuid,
#[serde(rename = "type")]
pub r#type: Type,
}
impl HistoryTransactionItem {
#[must_use]
pub const fn new() -> Self {
Self {
amount: 0.0,
date_time: OffsetDateTime::UNIX_EPOCH,
reference: Uuid::nil(),
r#type: Type::Unknown,
}
}
}
impl Default for HistoryTransactionItem {
fn default() -> Self {
Self::new()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Type {
#[serde(rename = "WITHDRAW")]
Withdraw,
#[serde(rename = "DEPOSIT")]
Deposit,
#[serde(rename = "FEE")]
Fee,
#[serde(rename = "TRANSFER")]
Transfer,
#[serde(other)]
Unknown,
}
impl Default for Type {
fn default() -> Self {
Self::Withdraw
}
}