use super::common::{
AgentService, AgentServiceChecksInfo, AgentServiceConnect, AgentServiceConnectProxy,
AgentWeights,
};
use crate::api::{check::common::AgentServiceCheck, Features};
use consulrs_derive::QueryEndpoint;
use derive_builder::Builder;
use rustify_derive::Endpoint;
use serde::Serialize;
use std::{collections::HashMap, fmt::Debug};
#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
#[endpoint(
path = "agent/services",
response = "HashMap<String, AgentService>",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ListServicesRequest {
#[endpoint(skip)]
pub features: Option<Features>,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
#[endpoint(
path = "agent/service/{self.name}",
response = "AgentService",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadServiceRequest {
#[endpoint(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub name: String,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
#[endpoint(
path = "agent/health/service/name/{self.name}",
response = "Vec<AgentServiceChecksInfo>",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ServiceHealthRequest {
#[endpoint(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub name: String,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
#[endpoint(
path = "agent/health/service/id/{self.id}",
response = "Vec<AgentServiceChecksInfo>",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ServiceHealthByIdRequest {
#[endpoint(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub id: String,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
#[endpoint(path = "agent/service/register", method = "PUT", builder = "true")]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct RegisterServiceRequest {
#[endpoint(skip)]
#[serde(skip)]
pub features: Option<Features>,
pub address: Option<String>,
pub check: Option<AgentServiceCheck>,
pub checks: Option<Vec<AgentServiceCheck>>,
pub connect: Option<Box<AgentServiceConnect>>,
pub enable_tag_override: Option<bool>,
#[serde(rename = "ID")]
pub id: Option<String>,
pub kind: Option<String>,
pub meta: Option<HashMap<String, String>>,
pub name: Option<String>,
pub ns: Option<String>,
pub port: Option<u64>,
pub proxy: Option<AgentServiceConnectProxy>,
pub tagged_addresses: Option<HashMap<String, String>>,
pub tags: Option<Vec<String>>,
pub weights: Option<AgentWeights>,
}
#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
#[endpoint(
path = "agent/service/deregister/{self.id}",
method = "PUT",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct DeregisterServiceRequest {
#[endpoint(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub id: String,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
#[endpoint(
path = "agent/service/maintenance/{self.id}",
method = "PUT",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct EnableMaintenanceRequest {
#[endpoint(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub id: String,
#[endpoint(query)]
pub enable: bool,
#[endpoint(query)]
pub ns: Option<String>,
}