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}