apisix_admin_client/models/
admin_upstream_responses.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[serde_with::skip_serializing_none]
5#[derive(Default, Debug, Clone, Serialize, Deserialize)]
6pub struct ApisixUpstream {
7    #[serde(rename = "type")]
8    pub type_field: Option<String>,
9    pub desc: Option<String>,
10    pub scheme: Option<String>,
11    pub nodes: Option<Value>, //untyped
12    pub create_time: Option<i64>,
13    pub update_time: Option<i64>,
14    pub name: Option<String>,
15    pub id: Option<Value>, //can be both string or integer
16}
17
18// region: tests
19#[cfg(test)]
20mod tests {
21    use serde_json::{to_string, to_string_pretty};
22    use super::*;
23    use tracing::{error, info};
24    use tracing_test::traced_test;
25    use crate::models::admin_upstream_requests::UpstreamType;
26    use crate::models::common::TypedItem;
27
28    #[traced_test]
29    #[tokio::test]
30    async fn test_parse_upstream_response() {
31        let nodes = r#"
32        {
33            "key": "/apisix/upstreams/gen-5NzR8BYUwwQX",
34            "value": {
35                "timeout": {
36                    "connect": 0.5,
37                    "send": 0.5,
38                    "read": 0.5
39                },
40                "type": "roundrobin",
41                "hash_on": "vars",
42                "desc": "Test Upstream Description",
43                "scheme": "http",
44                "update_time": 1727703719,
45                "retries": 3,
46                "id": "gen-5NzR8BYUwwQX",
47                "name": "Test Upstream",
48                "create_time": 1727703719,
49                "nodes": {
50                    "localhost:9000": 1
51                },
52                "retry_timeout": 5,
53                "pass_host": "pass"
54            }
55        }"#;
56        let nodes: TypedItem<ApisixUpstream> = serde_json::from_str(nodes).unwrap();
57        assert_eq!(nodes.key.unwrap(), "/apisix/upstreams/gen-5NzR8BYUwwQX");
58        assert_eq!(nodes.value.clone().unwrap().id.unwrap(), "gen-5NzR8BYUwwQX");
59        assert_eq!(nodes.value.clone().unwrap().name.unwrap(), "Test Upstream");
60        assert_eq!(nodes.value.clone().unwrap().desc.unwrap(), "Test Upstream Description");
61        assert_eq!(nodes.value.clone().unwrap().scheme.unwrap(), "http");
62        assert_eq!(nodes.value.clone().unwrap().type_field.unwrap(), "roundrobin");
63        assert_eq!(nodes.value.clone().unwrap().nodes.clone().unwrap()["localhost:9000"], 1);
64        assert_eq!(nodes.value.clone().unwrap().update_time.unwrap(), 1727703719);
65    }
66}
67// endregion: tests