gitlab/api/users/impersonation_tokens/
impersonation_tokens.rs1use derive_builder::Builder;
8
9use crate::api::endpoint_prelude::*;
10use crate::api::ParamValue;
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
14#[non_exhaustive]
15pub enum ImpersonationTokenState {
16 All,
18 Active,
20 Inactive,
22}
23
24impl ImpersonationTokenState {
25 pub(crate) fn as_str(self) -> &'static str {
27 match self {
28 ImpersonationTokenState::All => "all",
29 ImpersonationTokenState::Active => "active",
30 ImpersonationTokenState::Inactive => "inactive",
31 }
32 }
33}
34
35impl ParamValue<'static> for ImpersonationTokenState {
36 fn as_value(&self) -> Cow<'static, str> {
37 self.as_str().into()
38 }
39}
40
41#[derive(Debug, Builder, Clone)]
43#[builder(setter(strip_option))]
44pub struct ImpersonationTokens {
45 user: u64,
47 #[builder(default)]
49 state: Option<ImpersonationTokenState>,
50}
51
52impl ImpersonationTokens {
53 pub fn builder() -> ImpersonationTokensBuilder {
55 ImpersonationTokensBuilder::default()
56 }
57}
58
59impl Endpoint for ImpersonationTokens {
60 fn method(&self) -> Method {
61 Method::GET
62 }
63
64 fn endpoint(&self) -> Cow<'static, str> {
65 format!("users/{}/impersonation_tokens", self.user).into()
66 }
67
68 fn parameters(&self) -> QueryParams<'_> {
69 let mut params = QueryParams::default();
70
71 params.push_opt("state", self.state);
72
73 params
74 }
75}
76
77impl Pageable for ImpersonationTokens {}
78
79#[cfg(test)]
80mod tests {
81 use http::Method;
82
83 use crate::api::users::impersonation_tokens::{
84 ImpersonationTokenState, ImpersonationTokens, ImpersonationTokensBuilderError,
85 };
86 use crate::api::{self, Query};
87 use crate::test::client::{ExpectedUrl, SingleTestClient};
88
89 #[test]
90 fn impersonation_token_state_as_str() {
91 let items = &[
92 (ImpersonationTokenState::All, "all"),
93 (ImpersonationTokenState::Active, "active"),
94 (ImpersonationTokenState::Inactive, "inactive"),
95 ];
96
97 for (i, s) in items {
98 assert_eq!(i.as_str(), *s);
99 }
100 }
101
102 #[test]
103 fn user_is_necessary() {
104 let err = ImpersonationTokens::builder().build().unwrap_err();
105 crate::test::assert_missing_field!(err, ImpersonationTokensBuilderError, "user");
106 }
107
108 #[test]
109 fn user_is_sufficient() {
110 ImpersonationTokens::builder().user(1).build().unwrap();
111 }
112
113 #[test]
114 fn endpoint() {
115 let endpoint = ExpectedUrl::builder()
116 .method(Method::GET)
117 .endpoint("users/1/impersonation_tokens")
118 .build()
119 .unwrap();
120 let client = SingleTestClient::new_raw(endpoint, "");
121
122 let endpoint = ImpersonationTokens::builder().user(1).build().unwrap();
123 api::ignore(endpoint).query(&client).unwrap();
124 }
125
126 #[test]
127 fn endpoint_state() {
128 let endpoint = ExpectedUrl::builder()
129 .method(Method::GET)
130 .endpoint("users/1/impersonation_tokens")
131 .add_query_params(&[("state", "active")])
132 .build()
133 .unwrap();
134 let client = SingleTestClient::new_raw(endpoint, "");
135
136 let endpoint = ImpersonationTokens::builder()
137 .user(1)
138 .state(ImpersonationTokenState::Active)
139 .build()
140 .unwrap();
141 api::ignore(endpoint).query(&client).unwrap();
142 }
143}