apisix_admin_client/models/
admin_service_responses.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use crate::models::Plugins;
4
5#[serde_with::skip_serializing_none]
6#[derive(Default, Debug, Clone, Serialize, Deserialize)]
7pub struct ApisixService {
8    pub update_time: Option<i64>,
9    pub create_time: Option<i64>,
10    pub plugins: Plugins,
11    pub id: Option<Value>,
12    pub upstream_id: Option<Value>,
13    pub name: Option<String>,
14    pub desc: Option<String>,
15    pub enable_websocket: Option<bool>,
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::common::TypedItem;
26
27    #[traced_test]
28    #[tokio::test]
29    async fn test_parse_service_response() {
30        let nodes = r#"
31        {
32            "createdIndex": 17,
33            "key": "/apisix/services/100",
34            "value": {
35                "update_time": 1727660558,
36                "create_time": 1727660558,
37                "plugins": {
38                    "key-auth": {
39                        "hide_credentials": false,
40                        "query": "apikey",
41                        "header": "apikey"
42                    }
43                },
44                "id": "100",
45                "upstream_id": "1",
46                "name": "t1c-auth-api-service",
47                "desc": "Authentication API Service",
48                "enable_websocket": false
49            },
50            "modifiedIndex": 17
51        }"#;
52        let nodes: TypedItem<ApisixService> = serde_json::from_str(nodes).unwrap();
53        assert_eq!(nodes.key.unwrap(), "/apisix/services/100");
54        assert_eq!(nodes.value.clone().unwrap().id.unwrap(), "100");
55        assert_eq!(nodes.value.clone().unwrap().upstream_id.unwrap(), "1");
56        assert_eq!(nodes.value.clone().unwrap().name.unwrap(), "t1c-auth-api-service");
57        assert_eq!(nodes.value.clone().unwrap().desc.unwrap(), "Authentication API Service");
58        assert_eq!(nodes.value.clone().unwrap().enable_websocket.unwrap(), false);
59        assert_eq!(nodes.value.clone().unwrap().plugins.key_auth.clone().unwrap().hide_credentials.unwrap(), false);
60        assert_eq!(nodes.value.clone().unwrap().plugins.key_auth.clone().unwrap().query.unwrap(), "apikey");
61        assert_eq!(nodes.value.clone().unwrap().plugins.key_auth.clone().unwrap().header.unwrap(), "apikey");
62    }
63}
64// endregion: tests