nacos_lib/
get_instance.rs

1use async_trait::async_trait;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use to_url::ToUrl;
5use crate::client::REQ_CLIENT;
6use crate::parse_url::ParseUrl;
7use crate::result::Result;
8
9const GET_INSTANCE:&str = "/nacos/v1/ns/instance";
10
11#[allow(non_snake_case)]
12#[derive(Debug, Default, Clone, Deserialize, Serialize, ToUrl)]
13pub struct GetInstance{
14    /// 服务实例IP
15    pub ip: String,
16    /// 服务实例port
17    pub port: String,
18    /// 命名空间ID
19    pub namespaceId: Option<String>,
20    /// 服务名
21    pub serviceName: String,
22    /// 分组名
23    pub groupName: Option<String>,
24    /// 集群名称
25    pub cluster: Option<String>,
26    /// 是否健康
27    pub healthyOnly: bool,
28    /// 是否临时实例
29    pub ephemeral: Option<bool>,
30}
31
32#[async_trait]
33impl ParseUrl for GetInstance {}
34
35#[allow(non_snake_case)]
36#[derive(Default, Debug, Clone, Serialize, Deserialize)]
37pub struct Instance {
38    pub metadata: Metadata,
39    pub instanceId: String,
40    pub port: i64,
41    pub service: String,
42    pub healthy: bool,
43    pub ip: String,
44    pub clusterName: String,
45    pub weight: f64,
46}
47
48#[derive(Default, Debug, Clone, Serialize, Deserialize)]
49pub struct Metadata {}
50
51impl GetInstance {
52    pub async fn get_instance(&self) -> Result<Instance> {
53        let url = self.parse_url(GET_INSTANCE).await;
54        let data: Instance = REQ_CLIENT.get(url).send().await?.json().await?;
55        Ok(data)
56    }
57}