Skip to main content

uptrakit_openapi_client/
system_enrollment_tokens.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::pagination::PaginatedResponse;
4use crate::types_impl::system_enrollment_tokens::{
5    CreateSystemEnrollmentTokenRequest, ListSystemEnrollmentTokensQuery,
6    SystemEnrollmentTokenCreatedResponse, SystemEnrollmentTokenResponse,
7};
8use uuid::Uuid;
9
10impl UptrakitClient {
11    /// Create a new system enrollment token.
12    ///
13    /// The plaintext token is only returned in this response — store it
14    /// securely immediately after creation.
15    pub async fn create_system_enrollment_token(
16        &self,
17        req: &CreateSystemEnrollmentTokenRequest,
18    ) -> Result<SystemEnrollmentTokenCreatedResponse> {
19        self.post_json(crate::paths::system_enrollment_tokens::BASE, req)
20            .await
21    }
22
23    /// List system enrollment tokens with pagination.
24    pub async fn list_system_enrollment_tokens(
25        &self,
26        query: &ListSystemEnrollmentTokensQuery,
27    ) -> Result<PaginatedResponse<SystemEnrollmentTokenResponse>> {
28        self.get_with_query(crate::paths::system_enrollment_tokens::BASE, query)
29            .await
30    }
31
32    /// Fetch all system enrollment tokens across all pages.
33    pub async fn list_all_system_enrollment_tokens(
34        &self,
35        query: &ListSystemEnrollmentTokensQuery,
36    ) -> Result<Vec<SystemEnrollmentTokenResponse>> {
37        self.fetch_all_pages(crate::paths::system_enrollment_tokens::BASE, query)
38            .await
39    }
40
41    /// Get a single system enrollment token by ID.
42    pub async fn get_system_enrollment_token(
43        &self,
44        id: &Uuid,
45    ) -> Result<SystemEnrollmentTokenResponse> {
46        self.get(&crate::paths::system_enrollment_tokens::by_id(id))
47            .await
48    }
49
50    /// Revoke a system enrollment token (soft-delete).
51    pub async fn revoke_system_enrollment_token(&self, id: &Uuid) -> Result<()> {
52        self.delete(&crate::paths::system_enrollment_tokens::by_id(id))
53            .await
54    }
55}
56
57#[cfg(test)]
58mod tests {
59    use crate::types_impl::system_enrollment_tokens::{
60        CreateSystemEnrollmentTokenRequest, ListSystemEnrollmentTokensQuery,
61    };
62
63    #[test]
64    fn create_request_serialization() {
65        let req = CreateSystemEnrollmentTokenRequest {
66            name: "MQTT Bridge Token".to_string(),
67            max_uses: Some(5),
68            expires_in_seconds: Some(86400),
69        };
70        let json = serde_json::to_string(&req).expect("serialize");
71        assert!(json.contains("MQTT Bridge Token"));
72        let parsed: CreateSystemEnrollmentTokenRequest =
73            serde_json::from_str(&json).expect("deserialize");
74        assert_eq!(parsed.name, "MQTT Bridge Token");
75        assert_eq!(parsed.max_uses, Some(5));
76        assert_eq!(parsed.expires_in_seconds, Some(86400));
77    }
78
79    #[test]
80    fn list_query_serialization_with_params() {
81        let query = ListSystemEnrollmentTokensQuery {
82            page: Some(2),
83            per_page: Some(25),
84        };
85        let qs = serde_urlencoded::to_string(&query).expect("serialize");
86        assert!(qs.contains("page=2"));
87        assert!(qs.contains("per_page=25"));
88    }
89
90    #[test]
91    fn list_query_serialization_empty() {
92        let query = ListSystemEnrollmentTokensQuery {
93            page: None,
94            per_page: None,
95        };
96        let qs = serde_urlencoded::to_string(&query).expect("serialize");
97        assert!(qs.is_empty());
98    }
99}