use serde::{Serialize, Deserialize}; use tetratto_shared::{snow::Snowflake, unix_epoch_timestamp}; use super::auth::User; #[derive(Serialize, Deserialize)] pub struct CoinTransfer { pub id: usize, pub created: usize, pub sender: usize, pub receiver: usize, pub amount: i32, } impl CoinTransfer { /// Create a new [`CoinTransfer`]. pub fn new(sender: usize, receiver: usize, amount: i32) -> Self { Self { id: Snowflake::new().to_string().parse::().unwrap(), created: unix_epoch_timestamp(), sender, receiver, amount, } } /// Apply the effects of this transaction onto the sender and receiver balances. /// /// # Returns /// `(sender bankrupt, receiver bankrupt)` pub fn apply(&self, sender: &mut User, receiver: &mut User) -> (bool, bool) { sender.coins -= self.amount; receiver.coins += self.amount; (sender.coins < 0, receiver.coins < 0) } }