use serde::{Deserialize, Serialize};
use crate::{attachment::Attachment, user::User};
#[allow(dead_code)]
fn if_false(t: &bool) -> bool {
!t
}
bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct BotFlags: u64 {
const Verified = 1;
const Official = 2;
}
}
crate::impl_serde_bitflags!(BotFlags);
#[derive(Deserialize, Debug, Clone)]
pub struct PublicBot {
#[serde(rename = "_id")]
pub id: String,
pub username: String,
pub avatar: Option<Attachment>,
pub description: Option<String>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct Bot {
#[serde(rename = "_id")]
pub id: String,
pub owner: String,
pub token: String,
pub public: bool,
#[serde(skip_serializing_if = "if_false", default)]
pub analytics: bool,
#[serde(skip_serializing_if = "if_false", default)]
pub discoverable: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub interactions_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub terms_of_service_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub privacy_policy_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<BotFlags>,
}
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
pub struct PartialBot {
#[serde(rename = "_id")]
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub public: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub analytics: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub discoverable: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interactions_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub terms_of_service_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub privacy_policy_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<BotFlags>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct OwnedBot {
pub bot: Bot,
pub user: User,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub enum FieldsBot {
Token,
InteractionsURL,
}
#[derive(Deserialize, Debug, Clone)]
pub struct OwnedBots {
pub bots: Vec<Bot>,
pub users: Vec<User>,
}