apisix_admin_client/models/
admin_upstream_responses.rs1use 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>, pub create_time: Option<i64>,
13 pub update_time: Option<i64>,
14 pub name: Option<String>,
15 pub id: Option<Value>, }
17
18#[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