apisix_admin_client/models/
consumer_responses.rs

1use serde::{Deserialize, Serialize};
2use crate::models::Plugins;
3
4#[serde_with::skip_serializing_none]
5#[derive(Default, Debug, Clone, Serialize, Deserialize)]
6pub struct ApisixConsumer {
7    pub update_time: Option<i64>,
8    pub plugins: Option<Plugins>,
9    pub username: Option<String>,
10    pub desc: Option<String>,
11    pub create_time: Option<i64>,
12    pub group_id: Option<String>,
13}
14
15
16// region: tests
17#[cfg(test)]
18mod tests {
19    use serde_json::{to_string, to_string_pretty};
20    use super::*;
21    use tracing::{error, info};
22    use tracing_test::traced_test;
23    use crate::models::common::TypedItem;
24
25    #[traced_test]
26    #[tokio::test]
27    async fn test_parse_consumer_response() {
28        let nodes = r#"
29        {
30            "createdIndex": 223,
31            "key": "/apisix/consumers/readmycards",
32            "value": {
33                "update_time": 1727847549,
34                "plugins": {
35                    "key-auth": {
36                        "key": "7b034e79-2cb9-4e17-af10-ff1aad082307"
37                    }
38                },
39                "username": "readmycards",
40                "create_time": 1727847549,
41                "group_id": "trust1team"
42            },
43            "modifiedIndex": 223
44        }"#;
45        let nodes: TypedItem<ApisixConsumer> = serde_json::from_str(nodes).unwrap();
46        assert_eq!(nodes.key.unwrap(), "/apisix/consumers/readmycards");
47        assert_eq!(nodes.value.clone().unwrap().username.unwrap(), "readmycards");
48        assert_eq!(nodes.value.clone().unwrap().group_id.unwrap(), "trust1team");
49        assert_eq!(nodes.value.clone().unwrap().create_time.unwrap(), 1727847549);
50        assert_eq!(nodes.value.clone().unwrap().update_time.unwrap(), 1727847549);
51    }
52}
53// endregion: tests