use serde::{Deserialize, Serialize};
use crate::types::{Amount, BroadcasterId, CampaignId, UserId};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CharityCampaign {
pub id: CampaignId,
pub broadcaster_id: BroadcasterId,
pub broadcaster_login: String,
pub broadcaster_name: String,
pub charity_name: String,
pub charity_description: String,
pub charity_logo: String,
pub charity_website: String,
pub current_amount: Amount,
pub target_amount: Amount,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CharityCampaignDonation {
pub id: String,
pub campaign_id: CampaignId,
pub user_id: UserId,
pub user_login: String,
pub user_name: String,
pub amount: Amount,
}
#[cfg(test)]
mod tests {
use crate::{
charity::CharityCampaignDonation,
types::{Amount, CampaignId, UserId},
};
#[test]
fn donation_user_information() {
let users = vec![
("user123", "generous_user", "GenerousUser"),
("user456", "kind_viewer", "KindViewer"),
("user789", "charity_supporter", "CharitySupporter"),
];
for (user_id, user_login, user_name) in users {
let donation = CharityCampaignDonation {
id: "donation123".to_string(),
campaign_id: CampaignId::from("campaign123"),
user_id: UserId::from(user_id),
user_login: user_login.to_string(),
user_name: user_name.to_string(),
amount: Amount {
value: 2500,
decimal_places: 2,
currency: "USD".to_string(),
},
};
assert_eq!(donation.user_id.as_str(), user_id);
assert_eq!(donation.user_login, user_login);
assert_eq!(donation.user_name, user_name);
let serialized = serde_json::to_string(&donation).unwrap();
let deserialized: CharityCampaignDonation = serde_json::from_str(&serialized).unwrap();
assert_eq!(deserialized.user_login, user_login);
}
}
}