nacos_lib/
instance_list.rs

1use async_trait::async_trait;
2use serde::{Deserialize, Serialize};
3use to_url::ToUrl;
4use serde_json::Value;
5use crate::client::REQ_CLIENT;
6use crate::parse_url::ParseUrl;
7use crate::result::Result;
8
9const INSTANCE_LIST:&str = "/nacos/v1/ns/instance/list";
10
11#[allow(non_snake_case)]
12#[derive(Debug, Default, Clone, Deserialize, Serialize, ToUrl)]
13pub struct GetInstanceList {
14    /// 服务名
15    pub serviceName: String,
16    /// 分组名
17    pub groupName: Option<String>,
18    /// 命名空间ID
19    pub namespaceId: Option<String>,
20    /// 集群名称,多个集群用逗号分隔
21    pub clusters: Option<String>,
22    /// 是否只返回健康实例, 默认为false
23    pub healthyOnly: Option<bool>
24}
25
26#[async_trait]
27impl ParseUrl for GetInstanceList {}
28
29#[allow(non_snake_case)]
30#[derive(Default, Debug, Clone, Serialize, Deserialize)]
31pub struct Instance {
32    pub hosts: Vec<Host>,
33    pub dom: String,
34    pub name: String,
35    pub cacheMillis: i64,
36    pub lastRefTime: i64,
37    pub checksum: String,
38    pub useSpecifiedURL: bool,
39    pub clusters: String,
40    pub env: String,
41    pub metadata: Metadata,
42}
43
44#[allow(non_snake_case)]
45#[derive(Default, Debug, Clone, Serialize, Deserialize)]
46pub struct Host {
47    pub ip: String,
48    pub port: i64,
49    pub valid: bool,
50    pub healthy: bool,
51    pub marked: bool,
52    pub instanceId: String,
53    pub metadata: Metadata,
54    pub enabled: bool,
55    pub weight: f64,
56    pub clusterName: String,
57    pub serviceName: String,
58    pub ephemeral: bool,
59}
60
61#[allow(non_snake_case)]
62#[derive(Default, Debug, Clone, Serialize, Deserialize)]
63pub struct Metadata {
64}
65
66impl GetInstanceList {
67    pub async fn instance_list(&self) ->Result<Instance> {
68        let url = self.parse_url(INSTANCE_LIST).await;
69        let data: Instance  = REQ_CLIENT.get(url).send().await?.json().await?;
70        Ok(data)
71    }
72}