use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use to_url::ToUrl;
use crate::client::REQ_CLIENT;
use crate::parse_url::ParseUrl;
use crate::result::Result;
const GET_INSTANCE:&str = "/nacos/v1/ns/instance";
#[allow(non_snake_case)]
#[derive(Debug, Default, Clone, Deserialize, Serialize, ToUrl)]
pub struct GetInstance{
pub ip: String,
pub port: String,
pub namespaceId: Option<String>,
pub serviceName: String,
pub groupName: Option<String>,
pub cluster: Option<String>,
pub healthyOnly: bool,
pub ephemeral: Option<bool>,
}
#[async_trait]
impl ParseUrl for GetInstance {}
#[allow(non_snake_case)]
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
pub struct Instance {
pub metadata: Metadata,
pub instanceId: String,
pub port: i64,
pub service: String,
pub healthy: bool,
pub ip: String,
pub clusterName: String,
pub weight: f64,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
pub struct Metadata {}
impl GetInstance {
pub async fn get_instance(&self) -> Result<Instance> {
let url = self.parse_url(GET_INSTANCE).await;
let data: Instance = REQ_CLIENT.get(url).send().await?.json().await?;
Ok(data)
}
}