discord_client_structs 0.2.0

Discord API/gateway structs with serde support
Documentation
use crate::structs::channel::overrides::ChannelOverride;
use crate::structs::guild::deserialize_option_string_to_u64;
use crate::structs::misc::MuteConfig;
use discord_client_macros::Flags;
use serde::Deserialize;

#[derive(Debug, Deserialize, Clone, Flags)]
pub struct UserGuildSettings {
    pub channel_overrides: Vec<ChannelOverride>,
    #[flag_enum(
        "UnreadsAllMessages=11,UnreadsOnlyMentions=12,OptInChannelsOff=13,OptInChannelsOn=14"
    )]
    pub flags: u64,
    #[serde(default)]
    #[serde(deserialize_with = "deserialize_option_string_to_u64")]
    #[serde(serialize_with = "serialize_option_u64_as_string")]
    pub guild_id: Option<u64>,
    pub hide_muted_channels: bool,
    pub message_notifications: u64,
    pub mobile_push: bool,
    pub mute_scheduled_events: bool,
    pub muted: bool,
    pub mute_config: Option<MuteConfig>,
    pub notify_highlights: u64,
    pub suppress_everyone: bool,
    pub suppress_roles: bool,
    pub version: u64,
}

#[cfg(test)]
pub mod test_macro {
    use super::*;

    #[test]
    fn test_user_guild_settings_flags() {
        let json = r#"{
            "channel_overrides": [],
            "flags": 6144,
            "guild_id": "123456789012345678",
            "hide_muted_channels": true,
            "message_notifications": 1,
            "mobile_push": false,
            "mute_scheduled_events": true,
            "muted": false,
            "mute_config": null,
            "notify_highlights": 0,
            "suppress_everyone": false,
            "suppress_roles": true,
            "version": 1
        }"#;

        let settings: UserGuildSettings = serde_json::from_str(json).unwrap();
        println!("Encoded flags: {}", settings.flags);

        let active_flags = settings.get_flags();
        println!("Base flags: {:?}", active_flags);

        if settings.has_flags(UserGuildSettingsFlags::UnreadsAllMessages) {
            println!("UnreadsAllMessages added");
        }

        if settings.has_flags(UserGuildSettingsFlags::OptInChannelsOn) {
            println!("OptInChannelsOn is activated");
        } else {
            println!("OptInChannelsOn is not activated");
        }

        let mut settings_mut = settings.clone();
        settings_mut.add_flags(UserGuildSettingsFlags::OptInChannelsOn);
        println!(
            "After adding OptInChannelsOn: {:?}",
            settings_mut.get_flags()
        );

        settings_mut.remove_flags(UserGuildSettingsFlags::UnreadsAllMessages);
        println!("After removal: {:?}", settings_mut.get_flags());

        settings_mut.set_flags(vec![
            UserGuildSettingsFlags::OptInChannelsOff,
            UserGuildSettingsFlags::UnreadsOnlyMentions,
        ]);
        println!("After setting bulk flags: {:?}", settings_mut.get_flags());
        println!("Final encoded flags: {}", settings_mut.flags);
    }
}