uptrakit_openapi_client/
plugin_configs.rs1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::batch_actions::{BatchActionRequest, BatchActionResponse};
4use crate::types_impl::pagination::{PaginatedResponse, PaginationParams};
5use crate::types_impl::plugin_configs::{
6 CreatePluginConfigRequest, PluginConfigResponse, PluginTypeInfo, UpdatePluginConfigRequest,
7};
8use uuid::Uuid;
9
10impl UptrakitClient {
11 pub async fn list_plugin_types(&self) -> Result<Vec<PluginTypeInfo>> {
16 self.get(crate::paths::plugin_configs::PLUGIN_TYPES).await
17 }
18
19 pub async fn create_plugin_config(
21 &self,
22 req: &CreatePluginConfigRequest,
23 ) -> Result<PluginConfigResponse> {
24 self.post_json(crate::paths::plugin_configs::BASE, req)
25 .await
26 }
27
28 pub async fn list_plugin_configs(
30 &self,
31 params: &PaginationParams,
32 ) -> Result<PaginatedResponse<PluginConfigResponse>> {
33 self.get_with_query(crate::paths::plugin_configs::BASE, params)
34 .await
35 }
36
37 pub async fn list_all_plugin_configs(&self) -> Result<Vec<PluginConfigResponse>> {
45 let base = PaginationParams {
46 page: None,
47 per_page: None,
48 };
49 self.fetch_all_pages(crate::paths::plugin_configs::BASE, &base)
50 .await
51 }
52
53 pub async fn get_plugin_config(&self, id: &Uuid) -> Result<(PluginConfigResponse, String)> {
56 self.get_with_etag(&crate::paths::plugin_configs::by_id(id))
57 .await
58 }
59
60 pub async fn update_plugin_config(
63 &self,
64 id: &Uuid,
65 req: &UpdatePluginConfigRequest,
66 etag: &str,
67 ) -> Result<(PluginConfigResponse, String)> {
68 self.put_json_with_etag(&crate::paths::plugin_configs::by_id(id), req, etag)
69 .await
70 }
71
72 pub async fn delete_plugin_config(&self, id: &Uuid) -> Result<()> {
74 self.delete(&crate::paths::plugin_configs::by_id(id)).await
75 }
76
77 pub async fn batch_plugin_configs(
81 &self,
82 req: &BatchActionRequest,
83 ) -> Result<BatchActionResponse> {
84 self.post_json(crate::paths::plugin_configs::BATCH, req)
85 .await
86 }
87
88 pub async fn test_plugin_config(
94 &self,
95 req: &crate::types_impl::plugin_config_test::TestPluginConfigRequest,
96 ) -> Result<crate::types_impl::plugin_config_test::TestPluginConfigResponse> {
97 self.post_json(crate::paths::plugin_configs::TEST, req)
98 .await
99 }
100}
101
102#[cfg(test)]
103mod tests {
104 use crate::shared_types_impl::plugin_ids;
105 use crate::types_impl::pagination::PaginationParams;
106 use crate::types_impl::plugin_configs::{CreatePluginConfigRequest, UpdatePluginConfigRequest};
107
108 #[test]
109 fn create_plugin_config_request_serialization() {
110 let req = CreatePluginConfigRequest {
111 name: "GitHub Releases".to_string(),
112 plugin_type: plugin_ids::RELEASES_GITHUB.clone(),
113 config: serde_json::json!({"tag_strip_prefix": "v", "include_prereleases": false}),
114 enabled: true,
115 };
116 let json = serde_json::to_value(&req).expect("serialize");
117 assert_eq!(json["name"], "GitHub Releases");
118 assert_eq!(json["plugin_type"], "releases.github");
119 assert_eq!(json["config"]["tag_strip_prefix"], "v");
120 assert_eq!(json["enabled"], true);
121 }
122
123 #[test]
124 fn update_plugin_config_request_serialization() {
125 let req = UpdatePluginConfigRequest {
126 name: Some("Updated Config".to_string()),
127 config: Some(serde_json::json!({"key": "value"})),
128 enabled: Some(false),
129 };
130 let json = serde_json::to_value(&req).expect("serialize");
131 assert_eq!(json["name"], "Updated Config");
132 assert_eq!(json["config"]["key"], "value");
133 assert_eq!(json["enabled"], false);
134 }
135
136 #[test]
137 fn pagination_params_for_plugin_configs() {
138 let params = PaginationParams {
139 page: Some(1),
140 per_page: Some(25),
141 };
142 let qs = serde_urlencoded::to_string(¶ms).expect("serialize");
143 assert!(qs.contains("page=1"));
144 assert!(qs.contains("per_page=25"));
145 }
146}