From cf860ead273f05252ce3b31912c28b37ec9fd812 Mon Sep 17 00:00:00 2001 From: Yuichi <913637919@qq.com> Date: Wed, 1 Jan 2025 21:20:35 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E9=80=82=E9=85=8Dapiserver=E6=96=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api_client.rs | 7 +++++++ src/resources/pod.rs | 37 +++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/api_client.rs b/src/api_client.rs index 4c5ac99..955568f 100644 --- a/src/api_client.rs +++ b/src/api_client.rs @@ -7,6 +7,13 @@ pub struct ApiClient { client: Client, } +#[derive(Debug, Serialize, Deserialize)] +pub struct ApiResponse { + pub status_code: String, + pub message: String, + pub data: T, +} + impl ApiClient { pub fn new(base_url: String) -> Self { Self { diff --git a/src/resources/pod.rs b/src/resources/pod.rs index 3be79fa..9709724 100644 --- a/src/resources/pod.rs +++ b/src/resources/pod.rs @@ -2,6 +2,7 @@ use crate::api_client::ApiClient; use fleetmod::pod::Pod; use serde_json; use std::sync::Arc; +use crate::api_client::ApiResponse; pub struct PodClient { api_client: Arc, @@ -16,10 +17,9 @@ impl PodClient { let path = format!("api/v1/namespaces/{}/pods", namespace); let pod_json = serde_json::to_value(pod)?; let response = self.api_client.send_request(reqwest::Method::POST, &path, Some(pod_json)).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let pod_res: Pod = serde_json::from_value(response_body)?; + let response_body = response.json::>().await?; + if response_body.status_code == "OK" { + let pod_res: Pod = response_body.data; Ok(pod_res) } else { Err(format!("{}", response_body).into()) @@ -29,10 +29,9 @@ impl PodClient { pub async fn get_pod(&self, namespace: &str, name: &str) -> Result> { let path = format!("api/v1/namespaces/{}/pods/{}", namespace, name); let response = self.api_client.send_request(reqwest::Method::GET, &path, None).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let pod_res: Pod = serde_json::from_value(response_body)?; + let response_body = response.json::>().await?; + if response_body.status_code == "OK" { + let pod_res: Pod = response_body.data; Ok(pod_res) } else { Err(format!("{}", response_body).into()) @@ -42,10 +41,9 @@ impl PodClient { pub async fn list_pods(&self, namespace: &str) -> Result, Box> { let path = format!("api/v1/namespaces/{}/pods", namespace); let response = self.api_client.send_request(reqwest::Method::GET, &path, None).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let pod_res: Vec = serde_json::from_value(response_body)?; + let response_body = response.json::>().await?; + if response_body.status_code == "OK" { + let pod_res: Pod = response_body.data; Ok(pod_res) } else { Err(format!("{}", response_body).into()) @@ -56,10 +54,9 @@ impl PodClient { let path = format!("api/v1/namespaces/{}/pods/{}", namespace, name); let pod_json = serde_json::to_value(pod)?; let response = self.api_client.send_request(reqwest::Method::PUT, &path, Some(pod_json)).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let pod_res: Pod = serde_json::from_value(response_body)?; + let response_body = response.json::>().await?; + if response_body.status_code == "OK" { + let pod_res: Pod = response_body.data; Ok(pod_res) } else { Err(format!("{}", response_body).into()) @@ -69,10 +66,10 @@ impl PodClient { pub async fn delete_pod(&self, namespace: &str, name: &str) -> Result<(), Box> { let path = format!("api/v1/namespaces/{}/pods/{}", namespace, name); let response = self.api_client.send_request(reqwest::Method::DELETE, &path, None).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - Ok(()) + let response_body = response.json::>().await?; + if response_body.status_code == "OK" { + let pod_res: Pod = response_body.data; + Ok(pod_res) } else { Err(format!("{}", response_body).into()) } -- Gitee From 1c436d5f4c8350583582552fcbd68f431f1a16fa Mon Sep 17 00:00:00 2001 From: Yuichi <913637919@qq.com> Date: Wed, 1 Jan 2025 21:26:48 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E9=80=82=E9=85=8Dapiserver=E6=96=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resources/pod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/resources/pod.rs b/src/resources/pod.rs index 9709724..5f6eee9 100644 --- a/src/resources/pod.rs +++ b/src/resources/pod.rs @@ -3,7 +3,8 @@ use fleetmod::pod::Pod; use serde_json; use std::sync::Arc; use crate::api_client::ApiResponse; - +use serde::Serialize; +use serde::Deserialize; pub struct PodClient { api_client: Arc, } -- Gitee From 42ee2c17f0403d2ae7c280b1507470d2ca0c4ab5 Mon Sep 17 00:00:00 2001 From: Yuichi <913637919@qq.com> Date: Wed, 1 Jan 2025 21:27:37 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E9=80=82=E9=85=8Dapiserver=E6=96=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api_client.rs | 3 ++- src/resources/pod.rs | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/api_client.rs b/src/api_client.rs index 955568f..a139438 100644 --- a/src/api_client.rs +++ b/src/api_client.rs @@ -1,5 +1,6 @@ use reqwest::{Client, Method}; - +use serde::Serialize; +use serde::Deserialize; #[derive(Clone)] pub struct ApiClient { diff --git a/src/resources/pod.rs b/src/resources/pod.rs index 5f6eee9..e727acf 100644 --- a/src/resources/pod.rs +++ b/src/resources/pod.rs @@ -3,8 +3,6 @@ use fleetmod::pod::Pod; use serde_json; use std::sync::Arc; use crate::api_client::ApiResponse; -use serde::Serialize; -use serde::Deserialize; pub struct PodClient { api_client: Arc, } -- Gitee From af94e7af977b0e13ab159f7977751780a656206a Mon Sep 17 00:00:00 2001 From: Yuichi <913637919@qq.com> Date: Wed, 1 Jan 2025 21:33:38 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E9=80=82=E9=85=8Dapiserver=E6=96=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api_client.rs | 9 +++++---- src/resources/pod.rs | 47 ++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/api_client.rs b/src/api_client.rs index a139438..b495a14 100644 --- a/src/api_client.rs +++ b/src/api_client.rs @@ -9,10 +9,11 @@ pub struct ApiClient { } #[derive(Debug, Serialize, Deserialize)] -pub struct ApiResponse { - pub status_code: String, - pub message: String, - pub data: T, +struct ApiResponse { + status_code: String, + message: String, + #[serde(default)] // 处理 null 值 + data: Option, } impl ApiClient { diff --git a/src/resources/pod.rs b/src/resources/pod.rs index e727acf..6ce3226 100644 --- a/src/resources/pod.rs +++ b/src/resources/pod.rs @@ -17,11 +17,10 @@ impl PodClient { let pod_json = serde_json::to_value(pod)?; let response = self.api_client.send_request(reqwest::Method::POST, &path, Some(pod_json)).await?; let response_body = response.json::>().await?; - if response_body.status_code == "OK" { - let pod_res: Pod = response_body.data; - Ok(pod_res) - } else { - Err(format!("{}", response_body).into()) + + match response_body.data { + Some(pod) if response_body.status_code == "OK" => Ok(pod), + _ => Err(response_body.message.into()) } } @@ -29,23 +28,21 @@ impl PodClient { let path = format!("api/v1/namespaces/{}/pods/{}", namespace, name); let response = self.api_client.send_request(reqwest::Method::GET, &path, None).await?; let response_body = response.json::>().await?; - if response_body.status_code == "OK" { - let pod_res: Pod = response_body.data; - Ok(pod_res) - } else { - Err(format!("{}", response_body).into()) + + match response_body.data { + Some(pod) if response_body.status_code == "OK" => Ok(pod), + _ => Err(response_body.message.into()) } } pub async fn list_pods(&self, namespace: &str) -> Result, Box> { let path = format!("api/v1/namespaces/{}/pods", namespace); let response = self.api_client.send_request(reqwest::Method::GET, &path, None).await?; - let response_body = response.json::>().await?; - if response_body.status_code == "OK" { - let pod_res: Pod = response_body.data; - Ok(pod_res) - } else { - Err(format!("{}", response_body).into()) + let response_body = response.json::>>().await?; + + match response_body.data { + Some(pod) if response_body.status_code == "OK" => Ok(pod), + _ => Err(response_body.message.into()) } } @@ -54,11 +51,10 @@ impl PodClient { let pod_json = serde_json::to_value(pod)?; let response = self.api_client.send_request(reqwest::Method::PUT, &path, Some(pod_json)).await?; let response_body = response.json::>().await?; - if response_body.status_code == "OK" { - let pod_res: Pod = response_body.data; - Ok(pod_res) - } else { - Err(format!("{}", response_body).into()) + + match response_body.data { + Some(pod) if response_body.status_code == "OK" => Ok(pod), + _ => Err(response_body.message.into()) } } @@ -66,11 +62,10 @@ impl PodClient { let path = format!("api/v1/namespaces/{}/pods/{}", namespace, name); let response = self.api_client.send_request(reqwest::Method::DELETE, &path, None).await?; let response_body = response.json::>().await?; - if response_body.status_code == "OK" { - let pod_res: Pod = response_body.data; - Ok(pod_res) - } else { - Err(format!("{}", response_body).into()) + + match response_body.data { + Some(pod) if response_body.status_code == "OK" => Ok(pod), + _ => Err(response_body.message.into()) } } } -- Gitee From 93d0c1642a055670cb7db08bbff2286dfe1c40aa Mon Sep 17 00:00:00 2001 From: Yuichi <913637919@qq.com> Date: Wed, 1 Jan 2025 21:34:13 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E9=80=82=E9=85=8Dapiserver=E6=96=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api_client.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/api_client.rs b/src/api_client.rs index b495a14..bb2fd44 100644 --- a/src/api_client.rs +++ b/src/api_client.rs @@ -9,11 +9,11 @@ pub struct ApiClient { } #[derive(Debug, Serialize, Deserialize)] -struct ApiResponse { - status_code: String, - message: String, +pub struct ApiResponse { + pub status_code: String, + pub message: String, #[serde(default)] // 处理 null 值 - data: Option, + pub data: Option, } impl ApiClient { -- Gitee From 43f1cc218de3ca27ea2b4c5fe8caf9c9c5ae54f9 Mon Sep 17 00:00:00 2001 From: Yuichi <913637919@qq.com> Date: Wed, 1 Jan 2025 21:35:34 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E9=80=82=E9=85=8Dapiserver=E6=96=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resources/pod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/pod.rs b/src/resources/pod.rs index 6ce3226..967bdb2 100644 --- a/src/resources/pod.rs +++ b/src/resources/pod.rs @@ -58,7 +58,7 @@ impl PodClient { } } - pub async fn delete_pod(&self, namespace: &str, name: &str) -> Result<(), Box> { + pub async fn delete_pod(&self, namespace: &str, name: &str) -> Result> { let path = format!("api/v1/namespaces/{}/pods/{}", namespace, name); let response = self.api_client.send_request(reqwest::Method::DELETE, &path, None).await?; let response_body = response.json::>().await?; -- Gitee From 8a7b979d9bd03d36c3c062b9f196ce9f473e18fe Mon Sep 17 00:00:00 2001 From: Yuichi <913637919@qq.com> Date: Wed, 1 Jan 2025 21:55:00 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E9=80=82=E9=85=8Dapiserver=E6=96=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resources/node.rs | 63 +++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/src/resources/node.rs b/src/resources/node.rs index d99c742..8cb247e 100644 --- a/src/resources/node.rs +++ b/src/resources/node.rs @@ -1,7 +1,7 @@ use fleetmod::node::Node; use crate::api_client::ApiClient; use std::sync::Arc; - +use crate::api_client::ApiResponse; pub struct NodeClient { api_client: Arc, } @@ -15,39 +15,33 @@ impl NodeClient { let path = "api/v1/nodes/".to_string(); let node_json = serde_json::to_value(node)?; let response = self.api_client.send_request(reqwest::Method::POST, &path, Some(node_json)).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let node_res: Node = serde_json::from_value(response_body)?; - Ok(node_res) - } else { - Err(format!("{}", response_body).into()) + let response_body = response.json::>().await?; + + match response_body.data { + Some(node) if response_body.status_code == "OK" => Ok(node), + _ => Err(response_body.message.into()) } } pub async fn get_node(&self, name: &str) -> Result> { let path = format!("api/v1/nodes/{}", name); let response = self.api_client.send_request(reqwest::Method::GET, &path, None).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let node_res: Node = serde_json::from_value(response_body)?; - Ok(node_res) - } else { - Err(format!("{}", response_body).into()) + let response_body = response.json::>().await?; + + match response_body.data { + Some(node) if response_body.status_code == "OK" => Ok(node), + _ => Err(response_body.message.into()) } } pub async fn list_nodes(&self) -> Result, Box> { let path = "api/v1/nodes"; let response = self.api_client.send_request(reqwest::Method::GET, path, None).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let node_res: Vec = serde_json::from_value(response_body)?; - Ok(node_res) - } else { - Err(format!("{}", response_body).into()) + let response_body = response.json::>>().await?; + + match response_body.data { + Some(node) if response_body.status_code == "OK" => Ok(node), + _ => Err(response_body.message.into()) } } @@ -55,25 +49,22 @@ impl NodeClient { let path = format!("api/v1/nodes/{}", name); let node_json = serde_json::to_value(node)?; let response = self.api_client.send_request(reqwest::Method::PUT, &path, Some(node_json)).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - let node_res: Node = serde_json::from_value(response_body)?; - Ok(node_res) - } else { - Err(format!("{}", response_body).into()) + let response_body = response.json::>().await?; + + match response_body.data { + Some(node) if response_body.status_code == "OK" => Ok(node), + _ => Err(response_body.message.into()) } } - pub async fn delete_node(&self, name: &str) -> Result<(), Box> { + pub async fn delete_node(&self, name: &str) -> Result> { let path = format!("api/v1/nodes/{}", name); let response = self.api_client.send_request(reqwest::Method::DELETE, &path, None).await?; - let status = response.status(); - let response_body = response.json::().await?; - if status.is_success() { - Ok(()) - } else { - Err(format!("{}", response_body).into()) + let response_body = response.json::>().await?; + + match response_body.data { + Some(node) if response_body.status_code == "OK" => Ok(node), + _ => Err(response_body.message.into()) } } } -- Gitee