apisix_admin_client/models/
admin_route_responses.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use crate::models::common::ApisixTimeout;
4use crate::models::Plugins;
5use crate::UpstreamRequest;
6
7#[serde_with::skip_serializing_none]
8#[derive(Default, Debug, Clone, Serialize, Deserialize)]
9pub struct ApisixRoute {
10    pub id: Option<Value>, //preferred String
11    pub name: Option<String>,
12    pub desc: Option<String>,
13    pub status: Option<i64>,
14    pub update_time: Option<i64>,
15    pub plugins: Option<Plugins>,
16    pub uri: Option<String>,
17    pub uris: Option<Vec<String>>,
18    pub hosts: Option<Vec<String>>,
19    pub remote_addr: Option<String>,
20    pub remote_addrs: Option<Vec<String>>,
21    pub methods: Option<Vec<String>>,
22    pub upstream: Option<UpstreamRequest>,
23    pub upstream_id: Option<Value>, //preferred String
24    pub service_id: Option<Value>, //preferred String
25    pub timeout: Option<ApisixTimeout>,
26    pub enable_websocket: Option<bool>,
27    pub create_time: Option<i64>,
28    pub priority: Option<i64>,
29}
30
31// region: tests
32#[cfg(test)]
33mod tests {
34    use serde_json::{to_string, to_string_pretty};
35    use super::*;
36    use tracing::{error, info};
37    use tracing_test::traced_test;
38    use crate::models::common::TypedItem;
39
40    #[traced_test]
41    #[tokio::test]
42    async fn test_parse_route_response() {
43        let nodes = r#"
44        {
45            "createdIndex": 139,
46            "key": "/apisix/routes/route-t1c-authentication-api",
47            "value": {
48                "status": 1,
49                "update_time": 1727776498,
50                "plugins": {
51                    "proxy-rewrite": {
52                        "regex_uri": [
53                            "^/auth/v1/(. *)",
54                            "/v1/$1"
55                        ],
56                        "use_real_request_uri_unsafe": false
57                    }
58                },
59                "uri": "/auth/v1/*",
60                "upstream_id": "test_upstream",
61                "service_id": "test_service",
62                "create_time": 1727776498,
63                "priority": 0,
64                "id": "route-t1c-authentication-api"
65            },
66            "modifiedIndex": 139
67        }
68        "#;
69        let nodes: TypedItem<ApisixRoute> = serde_json::from_str(nodes).unwrap();
70        assert_eq!(nodes.value.clone().unwrap().id.unwrap(), "route-t1c-authentication-api");
71        assert_eq!(nodes.value.clone().unwrap().status.unwrap(), 1);
72        assert_eq!(nodes.value.clone().unwrap().update_time.unwrap(), 1727776498);
73        assert_eq!(nodes.value.clone().unwrap().uri.unwrap(), "/auth/v1/*");
74        assert_eq!(nodes.value.clone().unwrap().upstream_id.unwrap(), "test_upstream");
75        assert_eq!(nodes.value.clone().unwrap().create_time.unwrap(), 1727776498);
76        assert_eq!(nodes.value.clone().unwrap().priority.unwrap(), 0);
77    }
78}
79// endregion: tests