twilight_model/oauth/
install_params.rs

1use crate::guild::Permissions;
2use serde::{Deserialize, Serialize};
3
4/// Parameters for in-app authorization links.
5///
6/// Refer to [Discord Docs/Install Params Object].
7///
8/// [Discord Docs/Install Params Object]: https://discord.com/developers/docs/resources/application#install-params-object
9#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
10pub struct InstallParams {
11    /// Permissions to request for the bot role.
12    pub permissions: Permissions,
13    /// List of [scopes] to add the application to the guild with.
14    ///
15    /// [scopes]: crate::oauth::scope
16    pub scopes: Vec<String>,
17}
18
19#[cfg(test)]
20mod tests {
21    use super::InstallParams;
22    use crate::{guild::Permissions, oauth::scope};
23    use serde::{Deserialize, Serialize};
24    use serde_test::Token;
25    use static_assertions::assert_impl_all;
26    use std::fmt::Debug;
27
28    assert_impl_all!(
29        InstallParams: Clone,
30        Debug,
31        Deserialize<'static>,
32        Eq,
33        PartialEq,
34        Send,
35        Serialize,
36        Sync
37    );
38
39    #[test]
40    fn serde() {
41        let value = InstallParams {
42            permissions: Permissions::empty(),
43            scopes: Vec::from([
44                scope::APPLICATIONS_COMMANDS.to_owned(),
45                scope::APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE.to_owned(),
46                scope::IDENTIFY.to_owned(),
47            ]),
48        };
49
50        serde_test::assert_tokens(
51            &value,
52            &[
53                Token::Struct {
54                    name: "InstallParams",
55                    len: 2,
56                },
57                Token::String("permissions"),
58                Token::String("0"),
59                Token::String("scopes"),
60                Token::Seq { len: Some(3) },
61                Token::String(scope::APPLICATIONS_COMMANDS),
62                Token::String(scope::APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE),
63                Token::String(scope::IDENTIFY),
64                Token::SeqEnd,
65                Token::StructEnd,
66            ],
67        );
68    }
69}