1use super::{Delete, Get, Post, Put};
2use nacos_rs_sdk_macro::{Builder, Delete, Get, Post, Put, Value};
4use crate::util::{split_deserialize, split_serialize};
6use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8const INSTANCEOBJECT_URI: &str = "/v1/ns/instance";
14const INSTANCEBEAT_URI: &str = "/v1/ns/instance/beat";
15const QUERYINSTANCES_URI: &str = "/v1/ns/instance/list";
16
17#[derive(Serialize, Builder, Value, Default, Debug, Clone, Get, Post, Put, Delete)]
18#[serde(rename_all = "camelCase")]
19pub struct InstanceObject {
20    pub service_name: String,
21    pub ip: String,
22    pub port: u16,
23}
24
25#[derive(Serialize, Builder, Value, Default, Debug, Clone)]
26#[serde(rename_all = "camelCase")]
27pub struct RegisterInstanceOption {
28    pub cluster_name: Option<String>,
29    pub group_name: Option<String>,
30    pub namespace_id: Option<String>,
31    pub ephemeral: Option<bool>,
32    pub weight: Option<f64>,
33    pub enabled: Option<bool>,
34    pub healthy: Option<bool>,
35    pub metadata: Option<HashMap<String, String>>,
36}
37
38#[derive(Serialize, Builder, Value, Default, Debug, Clone)]
39#[serde(rename_all = "camelCase")]
40pub struct UpdateInstanceOption {
41    pub cluster_name: Option<String>,
42    pub group_name: Option<String>,
43    pub namespace_id: Option<String>,
44    pub ephemeral: Option<bool>,
45    pub weight: Option<f64>,
46    pub enabled: Option<bool>,
47    pub metadata: Option<HashMap<String, String>>,
48}
49
50#[derive(Serialize, Deserialize, Builder, Value, Default, Debug, Clone)]
51#[serde(rename_all = "camelCase")]
52pub struct RemoveInstanceOption {
53    pub cluster_name: Option<String>,
54    pub group_name: Option<String>,
55    pub namespace_id: Option<String>,
56    pub ephemeral: Option<bool>,
57    }
60
61#[derive(Serialize, Builder, Value, Default, Debug, Clone, Get)]
62#[serde(rename_all = "camelCase")]
63pub struct QueryInstances {
64    pub service_name: String,
65}
66
67#[derive(Serialize, Builder, Value, Default, Debug, Clone)]
68#[serde(rename_all = "camelCase")]
69pub struct QueryInstancesOption {
70    pub group_name: Option<String>,
71    pub namespace_id: Option<String>,
72    #[serde(default)]
73    #[serde(serialize_with = "split_serialize")]
74    pub clusters: Option<Vec<String>>,
75    pub healthy_only: Option<bool>,
77    }
80
81#[derive(Serialize, Builder, Value, Default, Debug, Clone)]
82#[serde(rename_all = "camelCase")]
83pub struct QueryInstanceOption {
84    pub group_name: Option<String>,
85    pub namespace_id: Option<String>,
86    pub ephemeral: Option<bool>,
87    #[serde(rename(serialize = "clusterName"))]
88    pub cluster: Option<String>,
89    pub healthy_only: Option<bool>,
90}
91
92#[derive(Deserialize, Value, Default, Debug, Clone)]
93#[serde(rename_all = "camelCase")]
94pub struct Host {
95    pub valid: Option<bool>,
96    pub marked: Option<bool>,
97    pub instance_id: Option<String>,
98    pub port: Option<u16>,
99    pub ip: Option<String>,
100    pub weight: Option<f64>,
101    pub metadata: Option<HashMap<String, String>>,
102}
103
104#[derive(Deserialize, Value, Default, Debug, Clone)]
105#[serde(rename_all = "camelCase")]
106pub struct Instances {
107    #[serde(rename(deserialize = "dom"))]
108    #[serde(rename(deserialize = "name"))]
109    pub service_name: Option<String>,
110    pub group_name: Option<String>,
111    pub cache_millis: Option<u64>,
112    pub use_specified_url: Option<bool>,
113    pub reach_protection_threshold: Option<bool>,
114    pub valid: Option<bool>,
115    pub hosts: Vec<Host>,
116    pub checksum: Option<String>,
117    pub last_ref_time: Option<u64>,
118    pub env: Option<String>,
119    #[serde(deserialize_with = "split_deserialize")]
120    pub clusters: Vec<String>,
121}
122
123#[derive(Serialize, Deserialize, Value, Default, Debug, Clone)]
124#[serde(rename_all = "camelCase")]
125pub struct Instance {
126    #[serde(rename(deserialize = "dom"))]
127    #[serde(rename(deserialize = "name"))]
128    pub service: Option<String>,
129    pub instance_id: Option<String>,
130    pub group_name: Option<String>,
131    pub ip: Option<String>,
132    pub port: Option<u16>,
133    pub healthy: Option<bool>,
134    pub cluster_name: Option<String>,
135    pub weight: Option<f64>,
136    pub metadata: Option<HashMap<String, String>>,
137}
138
139#[derive(Serialize, Deserialize, Builder, Value, Default, Debug, Clone, Put)]
140#[serde(rename_all = "camelCase")]
141pub struct InstanceBeat {
142    pub beat: Option<String>,
143}
144
145#[derive(Serialize, Deserialize, Builder, Value, Default, Debug, Clone)]
146#[serde(rename_all = "camelCase")]
147pub struct InstanceBeatOption {
148    pub namespace_id: Option<String>,
149    pub group_name: Option<String>,
150    pub client_beat_interval: Option<u32>,
151    pub code: Option<u32>,
152    pub light_beat_enabled: Option<bool>,
153}