use std::fmt;
use serde::Deserialize;
use uuid::Uuid;
#[derive(Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Account {
id: Uuid,
username: String,
email: String,
synthetic_usd_balance: u64,
balance: u64,
fee_tier: u64,
linking_public_key: Option<String>,
}
impl Account {
pub fn id(&self) -> Uuid {
self.id
}
pub fn username(&self) -> &str {
&self.username
}
pub fn email(&self) -> &str {
&self.email
}
pub fn synthetic_usd_balance(&self) -> u64 {
self.synthetic_usd_balance
}
pub fn balance(&self) -> u64 {
self.balance
}
pub fn fee_tier(&self) -> u64 {
self.fee_tier
}
pub fn linking_public_key(&self) -> Option<&String> {
self.linking_public_key.as_ref()
}
pub fn as_data_str(&self) -> String {
let mut data_str = format!(
"id: {}\nusername: {}\nemail: {}\nbalance: {}\nsynthetic_usd_balance: {}\nfee_tier: {}",
self.id,
self.username,
self.email,
self.balance,
self.synthetic_usd_balance,
self.fee_tier
);
if let Some(linking_key) = &self.linking_public_key {
data_str.push_str(&format!("\nlinking_public_key: {linking_key}"));
}
data_str
}
}
impl fmt::Display for Account {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Account:")?;
for line in self.as_data_str().lines() {
write!(f, "\n {line}")?;
}
Ok(())
}
}