use serde_json::value::RawValue;
use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::message::Webhook;
use crate::snowflake::Snowflake;
use crate::User;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GuildAuditLog {
pub webhooks: Vec<Webhook>,
pub users: Vec<User>,
#[serde(rename = "audit_log_entries")]
pub entries: Vec<GuildAuditLogEntry>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GuildAuditLogEntry {
pub target_id: Option<String>,
#[serde(default)]
pub changes: Option<Vec<GuildAuditLogChange>>,
pub user_id: Snowflake,
pub id: Snowflake,
pub action_type: GuildAuditLogEvent,
pub options: Option<GuildAuditEntryInfo>,
pub reason: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GuildAuditLogChange {
pub new_value: Box<RawValue>,
pub old_value: Box<RawValue>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GuildAuditEntryInfo {
#[serde(default)]
pub delete_member_days: Option<String>,
#[serde(default)]
pub members_removed: Option<String>,
#[serde(default)]
pub channel_id: Option<Snowflake>,
#[serde(default)]
pub count: Option<String>,
#[serde(default)]
pub id: Option<Snowflake>,
#[serde(default, rename = "type")]
pub kind: Option<String>,
#[serde(default)]
pub role_name: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum GuildAuditLogChangeKey {
Name(String),
IconHash(String),
SplashHash(String),
}
#[derive(Clone, Debug, Deserialize_repr, Serialize_repr)]
#[repr(u16)]
pub enum GuildAuditLogEvent {
GuildUpdate = 1,
ChannelCreate = 10,
ChannelUpdate,
ChannelDelete,
ChannelOverwriteCreate,
ChannelOverwriteUpdate,
ChannelOverwriteDelete,
MemberKick = 20,
MemberPrune,
MemberBanAdd,
MemberBanRemove,
MemberUpdate,
MemberRoleUpdate,
RoleCreate = 30,
RoleUpdate,
RoleDelete,
InviteCreate = 40,
InviteUpdate,
InviteDelete,
WebhookCreate = 50,
WebhookUpdate,
WebhookDelete,
EmojiCreate = 60,
EmojiUpdate,
EmojiDelete,
MessageDelete = 72,
}
#[derive(Serialize, Debug, Default)]
pub struct GetAuditLogOptions {
#[serde(skip_serializing_if = "Option::is_none")]
user_id: Option<Snowflake>,
#[serde(skip_serializing_if = "Option::is_none")]
action_type: Option<GuildAuditLogEvent>,
#[serde(skip_serializing_if = "Option::is_none")]
before: Option<Snowflake>,
#[serde(skip_serializing_if = "Option::is_none")]
limit: Option<i32>,
}
impl GetAuditLogOptions {
pub fn user_id(mut self, id: Snowflake) -> Self {
self.user_id = Some(id);
self
}
pub fn action_type(mut self, event: GuildAuditLogEvent) -> Self {
self.action_type = Some(event);
self
}
pub fn before(mut self, id: Snowflake) -> Self {
self.before = Some(id);
self
}
pub fn limit(mut self, num: i32) -> Self {
self.limit = Some(num);
self
}
}