twilight_model/oauth/
install_params.rs1use crate::guild::Permissions;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
10pub struct InstallParams {
11    pub permissions: Permissions,
13    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}