nacos_rust_client/grpc/
utils.rs

1use std::collections::HashMap;
2
3use super::{api_model::BaseResponse, nacos_proto};
4
5pub struct PayloadUtils;
6
7impl PayloadUtils {
8    pub fn new_metadata(
9        r#type: &str,
10        client_ip: &str,
11        headers: HashMap<String, String>,
12    ) -> nacos_proto::Metadata {
13        nacos_proto::Metadata {
14            r#type: r#type.to_owned(),
15            client_ip: client_ip.to_owned(),
16            headers,
17        }
18    }
19
20    pub fn build_error_payload(error_code: u16, error_msg: String) -> nacos_proto::Payload {
21        let error_val = BaseResponse::build_error_response(error_code, error_msg).to_json_string();
22        Self::build_payload("ErrorResponse", error_val)
23    }
24
25    pub fn build_payload(url: &str, val: String) -> nacos_proto::Payload {
26        Self::build_full_payload(url, val, "", Default::default())
27    }
28
29    pub fn build_full_payload(
30        url: &str,
31        val: String,
32        client_ip: &str,
33        headers: HashMap<String, String>,
34    ) -> nacos_proto::Payload {
35        let body = nacos_proto::Any {
36            type_url: "".into(),
37            value: val.into_bytes(),
38        };
39        let meta = Self::new_metadata(url, client_ip, headers);
40        nacos_proto::Payload {
41            body: Some(body),
42            metadata: Some(meta),
43        }
44    }
45
46    pub fn get_payload_header(payload: &nacos_proto::Payload) -> String {
47        let mut str = String::default();
48        if let Some(meta) = &payload.metadata {
49            str.push_str(&format!("type:{},", meta.r#type));
50            str.push_str(&format!("client_ip:{},", meta.client_ip));
51            str.push_str(&format!("header:{:?},", meta.headers));
52        }
53        str
54    }
55
56    pub fn get_payload_string(payload: &nacos_proto::Payload) -> String {
57        let mut str = String::default();
58        if let Some(meta) = &payload.metadata {
59            str.push_str(&format!("type:{},\n\t", meta.r#type));
60            str.push_str(&format!("client_ip:{},\n\t", meta.client_ip));
61            str.push_str(&format!("header:{:?},\n\t", meta.headers));
62        }
63        if let Some(body) = &payload.body {
64            let new_value = body.clone();
65            let value_str = String::from_utf8(new_value.value).unwrap();
66            str.push_str(&format!("body:{}", value_str));
67        }
68        str
69    }
70
71    pub fn get_payload_type(payload: &nacos_proto::Payload) -> Option<&String> {
72        if let Some(meta) = &payload.metadata {
73            return Some(&meta.r#type);
74        }
75        None
76    }
77
78    pub fn get_metadata_type(metadata: &Option<nacos_proto::Metadata>) -> Option<&String> {
79        if let Some(meta) = metadata {
80            return Some(&meta.r#type);
81        }
82        None
83    }
84}