twilight_model/oauth/
application_integration_type.rs

1use serde::{Deserialize, Serialize};
2
3use super::InstallParams;
4
5#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
6#[non_exhaustive]
7#[serde(from = "u8", into = "u8")]
8pub enum ApplicationIntegrationType {
9    GuildInstall,
10    UserInstall,
11    /// Variant value is unknown to the library.
12    Unknown(u8),
13}
14
15impl ApplicationIntegrationType {
16    pub const fn kind(self) -> &'static str {
17        match self {
18            Self::GuildInstall => "GUILD_INSTALL",
19            Self::UserInstall => "USER_INSTALL",
20            Self::Unknown(_) => "Unknown",
21        }
22    }
23}
24
25impl From<u8> for ApplicationIntegrationType {
26    fn from(value: u8) -> Self {
27        match value {
28            0 => Self::GuildInstall,
29            1 => Self::UserInstall,
30            unknown => Self::Unknown(unknown),
31        }
32    }
33}
34
35impl From<ApplicationIntegrationType> for u8 {
36    fn from(value: ApplicationIntegrationType) -> Self {
37        match value {
38            ApplicationIntegrationType::GuildInstall => 0,
39            ApplicationIntegrationType::UserInstall => 1,
40            ApplicationIntegrationType::Unknown(unknown) => unknown,
41        }
42    }
43}
44
45#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
46pub struct ApplicationIntegrationMap<Guild, User = Guild> {
47    #[serde(rename = "0")]
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub guild: Option<Guild>,
50    #[serde(rename = "1")]
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub user: Option<User>,
53}
54
55#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
56pub struct ApplicationIntegrationTypeConfig {
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub oauth2_install_params: Option<InstallParams>,
59}