mod change;
mod change_key;
mod entry;
mod event_type;
mod integration;
mod optional_entry_info;
pub use self::{
change::{AffectedRole, AuditLogChange, AuditLogChangeTypeValue},
change_key::AuditLogChangeKey,
entry::AuditLogEntry,
event_type::AuditLogEventType,
integration::AuditLogGuildIntegration,
optional_entry_info::AuditLogOptionalEntryInfo,
};
use super::auto_moderation::AutoModerationRule;
use crate::{
application::command::Command,
channel::{Channel, Webhook},
guild::scheduled_event::GuildScheduledEvent,
user::User,
};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct AuditLog {
pub application_commands: Vec<Command>,
pub auto_moderation_rules: Vec<AutoModerationRule>,
#[serde(rename = "audit_log_entries")]
pub entries: Vec<AuditLogEntry>,
pub guild_scheduled_events: Vec<GuildScheduledEvent>,
pub integrations: Vec<AuditLogGuildIntegration>,
pub threads: Vec<Channel>,
pub users: Vec<User>,
pub webhooks: Vec<Webhook>,
}
#[cfg(test)]
mod tests {
use super::AuditLog;
use serde::{Deserialize, Serialize};
use serde_test::Token;
use static_assertions::{assert_fields, assert_impl_all};
use std::fmt::Debug;
assert_fields!(
AuditLog: entries,
guild_scheduled_events,
integrations,
users,
webhooks
);
assert_impl_all!(
AuditLog: Clone,
Debug,
Deserialize<'static>,
PartialEq,
Send,
Serialize,
Sync
);
#[test]
fn serde() {
let value = AuditLog {
application_commands: Vec::new(),
auto_moderation_rules: Vec::new(),
entries: Vec::new(),
guild_scheduled_events: Vec::new(),
integrations: Vec::new(),
threads: Vec::new(),
users: Vec::new(),
webhooks: Vec::new(),
};
serde_test::assert_tokens(
&value,
&[
Token::Struct {
name: "AuditLog",
len: 8,
},
Token::Str("application_commands"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::Str("auto_moderation_rules"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::Str("audit_log_entries"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::Str("guild_scheduled_events"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::Str("integrations"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::Str("threads"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::Str("users"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::Str("webhooks"),
Token::Seq { len: Some(0) },
Token::SeqEnd,
Token::StructEnd,
],
)
}
}