consulrs 0.1.0

An asynchronous Rust client library for the Hashicorp Consul API.
Documentation
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use std::{collections::HashMap, fmt::Debug};

use crate::api::{
    check::common::{AgentServiceCheck, HealthCheck},
    connect::common::{ExposeConfig, MeshGatewayConfig, TransparentProxyConfig, Upstream},
};

#[skip_serializing_none]
#[derive(Builder, Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct AgentService {
    pub address: Option<String>,
    pub connect: Option<AgentServiceConnect>,
    pub content_hash: Option<String>,
    pub create_index: Option<u64>,
    pub datacenter: Option<String>,
    pub enable_tag_override: Option<bool>,
    #[serde(rename = "ID")]
    pub id: Option<String>,
    pub kind: Option<String>,
    pub meta: Option<HashMap<String, String>>,
    pub modify_index: Option<u64>,
    pub name: Option<String>,
    pub namespace: Option<String>,
    pub port: Option<u64>,
    pub proxy: Option<AgentServiceConnectProxy>,
    pub service: Option<String>,
    pub socket_path: Option<String>,
    pub tagged_addresses: Option<HashMap<String, String>>,
    pub tags: Option<Vec<String>>,
    pub weights: Option<AgentWeights>,
}

#[skip_serializing_none]
#[derive(Builder, Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct AgentServiceChecksInfo {
    pub aggregated_status: String,
    pub checks: Vec<HealthCheck>,
    pub service: AgentService,
}

#[skip_serializing_none]
#[derive(Builder, Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct AgentServiceConnectProxy {
    pub config: Option<HashMap<String, String>>,
    #[serde(rename = "DestinationServiceID")]
    pub destination_service_id: Option<String>,
    pub destination_service_name: Option<String>,
    pub expose: Option<ExposeConfig>,
    pub local_service_address: Option<String>,
    pub local_service_port: Option<u64>,
    pub local_service_socket_path: Option<String>,
    pub mesh_gateway: Option<MeshGatewayConfig>,
    pub mode: Option<String>,
    pub transparent_proxy: Option<TransparentProxyConfig>,
    pub upstreams: Option<Vec<Upstream>>,
}

#[skip_serializing_none]
#[derive(Builder, Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct AgentServiceConnect {
    pub native: Option<bool>,
    pub sidecar_service: Option<AgentServiceRegistration>,
}

#[skip_serializing_none]
#[derive(Builder, Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct AgentServiceRegistration {
    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>,
}

#[skip_serializing_none]
#[derive(Builder, Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct AgentWeights {
    pub passing: Option<u64>,
    pub warning: Option<u64>,
}