feat(core/models): implement Bot and PublicBot
This commit is contained in:
@@ -5,4 +5,19 @@ edition = "2021"
|
|||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[features]
|
||||||
|
serde = [ "dep:serde" ]
|
||||||
|
schemas = [ "dep:schemars" ]
|
||||||
|
from_database = [ "revolt-database" ]
|
||||||
|
|
||||||
|
default = [ "serde", "from_database" ]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
# Repo
|
||||||
|
revolt-database = { path = "../database", optional = true }
|
||||||
|
|
||||||
|
# Serialisation
|
||||||
|
serde = { version = "1", features = ["derive"], optional = true }
|
||||||
|
|
||||||
|
# Spec Generation
|
||||||
|
schemars = { version = "0.8.8", optional = true }
|
||||||
|
|||||||
103
crates/core/models/src/bots.rs
Normal file
103
crates/core/models/src/bots.rs
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
auto_derived!(
|
||||||
|
/// # Bot
|
||||||
|
pub struct Bot {
|
||||||
|
/// Bot Id
|
||||||
|
#[serde(rename = "_id")]
|
||||||
|
pub id: String,
|
||||||
|
|
||||||
|
/// User Id of the bot owner
|
||||||
|
#[serde(rename = "owner")]
|
||||||
|
pub owner_id: String,
|
||||||
|
/// Token used to authenticate requests for this bot
|
||||||
|
pub token: String,
|
||||||
|
/// Whether the bot is public
|
||||||
|
/// (may be invited by anyone)
|
||||||
|
pub public: bool,
|
||||||
|
|
||||||
|
/// Whether to enable analytics
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(skip_serializing_if = "crate::if_false", default)
|
||||||
|
)]
|
||||||
|
pub analytics: bool,
|
||||||
|
/// Whether this bot should be publicly discoverable
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(skip_serializing_if = "crate::if_false", default)
|
||||||
|
)]
|
||||||
|
pub discoverable: bool,
|
||||||
|
/// Reserved; URL for handling interactions
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(skip_serializing_if = "String::is_empty", default)
|
||||||
|
)]
|
||||||
|
pub interactions_url: String,
|
||||||
|
/// URL for terms of service
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(skip_serializing_if = "String::is_empty", default)
|
||||||
|
)]
|
||||||
|
pub terms_of_service_url: String,
|
||||||
|
/// URL for privacy policy
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(skip_serializing_if = "String::is_empty", default)
|
||||||
|
)]
|
||||||
|
pub privacy_policy_url: String,
|
||||||
|
|
||||||
|
/// Enum of bot flags
|
||||||
|
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
||||||
|
pub flags: Option<i32>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// # Public Bot
|
||||||
|
pub struct PublicBot {
|
||||||
|
/// Bot Id
|
||||||
|
#[serde(rename = "_id")]
|
||||||
|
id: String,
|
||||||
|
|
||||||
|
/// Bot Username
|
||||||
|
username: String,
|
||||||
|
/// Profile Avatar
|
||||||
|
#[serde(skip_serializing_if = "String::is_empty")]
|
||||||
|
avatar: String,
|
||||||
|
/// Profile Description
|
||||||
|
#[serde(skip_serializing_if = "String::is_empty")]
|
||||||
|
description: String,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "from_database")]
|
||||||
|
impl PublicBot {
|
||||||
|
pub fn from(
|
||||||
|
bot: revolt_database::Bot,
|
||||||
|
username: String,
|
||||||
|
avatar: Option<String>,
|
||||||
|
description: Option<String>,
|
||||||
|
) -> Self {
|
||||||
|
PublicBot {
|
||||||
|
id: bot.id,
|
||||||
|
username,
|
||||||
|
avatar: avatar.unwrap_or_default(),
|
||||||
|
description: description.unwrap_or_default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "from_database")]
|
||||||
|
impl From<revolt_database::Bot> for Bot {
|
||||||
|
fn from(value: revolt_database::Bot) -> Self {
|
||||||
|
Bot {
|
||||||
|
id: value.id,
|
||||||
|
owner_id: value.owner,
|
||||||
|
token: value.token,
|
||||||
|
public: value.public,
|
||||||
|
analytics: value.analytics,
|
||||||
|
discoverable: value.discoverable,
|
||||||
|
interactions_url: value.interactions_url,
|
||||||
|
terms_of_service_url: value.terms_of_service_url,
|
||||||
|
privacy_policy_url: value.privacy_policy_url,
|
||||||
|
flags: value.flags,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +1,27 @@
|
|||||||
|
#[cfg(feature = "serde")]
|
||||||
|
#[macro_use]
|
||||||
|
extern crate serde;
|
||||||
|
|
||||||
|
#[cfg(feature = "schemas")]
|
||||||
|
#[macro_use]
|
||||||
|
extern crate schemars;
|
||||||
|
|
||||||
|
macro_rules! auto_derived {
|
||||||
|
( $( $item:item )+ ) => {
|
||||||
|
$(
|
||||||
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||||
|
#[cfg_attr(feature = "schemas", derive(JsonSchema))]
|
||||||
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||||
|
$item
|
||||||
|
)+
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
mod bots;
|
||||||
|
|
||||||
|
pub use bots::*;
|
||||||
|
|
||||||
|
/// Utility function to check if a boolean value is false
|
||||||
|
pub fn if_false(t: &bool) -> bool {
|
||||||
|
!t
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user