consulrs/api/service/
requests.rs

1use super::common::{
2    AgentService, AgentServiceChecksInfo, AgentServiceConnect, AgentServiceConnectProxy,
3    AgentWeights,
4};
5use crate::api::{check::common::AgentServiceCheck, Features};
6use consulrs_derive::QueryEndpoint;
7use derive_builder::Builder;
8use rustify_derive::Endpoint;
9use serde::Serialize;
10use std::{collections::HashMap, fmt::Debug};
11
12/// ## List Services
13/// This endpoint returns all the services that are registered with the local
14/// agent.
15///
16/// * Path: agent/services
17/// * Method: GET
18/// * Response: [HashMap<String, AgentService>]
19/// * Reference: https://www.consul.io/api-docs/agent/service#list-services
20#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
21#[endpoint(
22    path = "agent/services",
23    response = "HashMap<String, AgentService>",
24    builder = "true"
25)]
26#[builder(setter(into, strip_option), default)]
27pub struct ListServicesRequest {
28    #[endpoint(skip)]
29    pub features: Option<Features>,
30    #[endpoint(query)]
31    pub ns: Option<String>,
32}
33
34/// ## Get Service Configuration
35/// This endpoint returns the full service definition for a single service
36/// instance registered on the local agent.
37///
38/// * Path: agent/service/{self.name}
39/// * Method: GET
40/// * Response: [AgentService]
41/// * Reference: https://www.consul.io/api-docs/agent/service#get-service-configuration
42#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
43#[endpoint(
44    path = "agent/service/{self.name}",
45    response = "AgentService",
46    builder = "true"
47)]
48#[builder(setter(into, strip_option), default)]
49pub struct ReadServiceRequest {
50    #[endpoint(skip)]
51    pub features: Option<Features>,
52    #[endpoint(skip)]
53    pub name: String,
54    #[endpoint(query)]
55    pub ns: Option<String>,
56}
57
58/// ## Get local service health
59/// Retrieve an aggregated state of service(s) on the local agent by name.
60///
61/// * Path: agent/health/service/name/{self.service}
62/// * Method: GET
63/// * Response: [Vec<AgentServiceChecksInfo>]
64/// * Reference: https://www.consul.io/api-docs/agent/service#get-local-service-health
65#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
66#[endpoint(
67    path = "agent/health/service/name/{self.name}",
68    response = "Vec<AgentServiceChecksInfo>",
69    builder = "true"
70)]
71#[builder(setter(into, strip_option), default)]
72pub struct ServiceHealthRequest {
73    #[endpoint(skip)]
74    pub features: Option<Features>,
75    #[endpoint(skip)]
76    pub name: String,
77    #[endpoint(query)]
78    pub ns: Option<String>,
79}
80
81/// ## Get local service health by ID
82/// Retrieve the health state of a specific service on the local agent by ID.
83///
84/// * Path: agent/health/service/id/{self.id}
85/// * Method: GET
86/// * Response: [Vec<AgentServiceChecksInfo>]
87/// * Reference: https://www.consul.io/api-docs/agent/service#get-local-service-health-by-its-id
88#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
89#[endpoint(
90    path = "agent/health/service/id/{self.id}",
91    response = "Vec<AgentServiceChecksInfo>",
92    builder = "true"
93)]
94#[builder(setter(into, strip_option), default)]
95pub struct ServiceHealthByIdRequest {
96    #[endpoint(skip)]
97    pub features: Option<Features>,
98    #[endpoint(skip)]
99    pub id: String,
100    #[endpoint(query)]
101    pub ns: Option<String>,
102}
103
104/// ## Register Service
105/// This endpoint adds a new service, with optional health checks, to the local
106/// agent.
107///
108/// * Path: agent/service/register
109/// * Method: PUT
110/// * Response: N/A
111/// * Reference: https://www.consul.io/api-docs/agent/service#register-service
112#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
113#[endpoint(path = "agent/service/register", method = "PUT", builder = "true")]
114#[serde(rename_all = "PascalCase")]
115#[builder(setter(into, strip_option), default)]
116pub struct RegisterServiceRequest {
117    #[endpoint(skip)]
118    #[serde(skip)]
119    pub features: Option<Features>,
120    pub address: Option<String>,
121    pub check: Option<AgentServiceCheck>,
122    pub checks: Option<Vec<AgentServiceCheck>>,
123    pub connect: Option<Box<AgentServiceConnect>>,
124    pub enable_tag_override: Option<bool>,
125    #[serde(rename = "ID")]
126    pub id: Option<String>,
127    pub kind: Option<String>,
128    pub meta: Option<HashMap<String, String>>,
129    pub name: Option<String>,
130    pub ns: Option<String>,
131    pub port: Option<u64>,
132    pub proxy: Option<AgentServiceConnectProxy>,
133    pub tagged_addresses: Option<HashMap<String, String>>,
134    pub tags: Option<Vec<String>>,
135    pub weights: Option<AgentWeights>,
136}
137
138/// ## Deregister Service
139/// This endpoint removes a service from the local agent.
140///
141/// * Path: agent/service/deregister/{self.id}
142/// * Method: PUT
143/// * Response: N/A
144/// * Reference: https://www.consul.io/api-docs/agent/service#deregister-service
145#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
146#[endpoint(
147    path = "agent/service/deregister/{self.id}",
148    method = "PUT",
149    builder = "true"
150)]
151#[builder(setter(into, strip_option), default)]
152pub struct DeregisterServiceRequest {
153    #[endpoint(skip)]
154    pub features: Option<Features>,
155    #[endpoint(skip)]
156    pub id: String,
157    #[endpoint(query)]
158    pub ns: Option<String>,
159}
160
161/// ## Enable Maintenance Mode
162/// This endpoint places a given service into "maintenance mode".
163///
164/// * Path: agent/service/maintenance/{self.id}
165/// * Method: PUT
166/// * Response: N/A
167/// * Reference: https://www.consul.io/api-docs/agent/service#enable-maintenance-mode
168#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
169#[endpoint(
170    path = "agent/service/maintenance/{self.id}",
171    method = "PUT",
172    builder = "true"
173)]
174#[builder(setter(into, strip_option), default)]
175pub struct EnableMaintenanceRequest {
176    #[endpoint(skip)]
177    pub features: Option<Features>,
178    #[endpoint(skip)]
179    pub id: String,
180    #[endpoint(query)]
181    pub enable: bool,
182    #[endpoint(query)]
183    pub ns: Option<String>,
184}