nacos_lib/
instance_list.rs1use 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 pub serviceName: String,
16 pub groupName: Option<String>,
18 pub namespaceId: Option<String>,
20 pub clusters: Option<String>,
22 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}