twitch_highway 0.3.1

Twitch API
Documentation
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);
        }
    }
}