Skip to content
This repository was archived by the owner on Dec 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"cSpell.words": [
"datacenter"
]
}
46 changes: 25 additions & 21 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,35 @@ keywords = ["Consul", "API", "Client", "Hashicorp"]
edition = "2018"

[workspace]
members = [
"consulrs_derive",
]
members = ["consulrs_derive"]

[dependencies]
async-trait = "0.1.51"
base64 = "0.13.0"
async-trait = "0.1.80"
base64 = "0.22.1"
consulrs_derive = { version = "0.1.0", path = "consulrs_derive" }
derive_builder = "0.10.2"
http = "0.2.5"
reqwest = { version = "0.11.4", default-features = false, features = ["rustls-tls"] }
rustify = "0.5.2"
rustify_derive = "0.5.2"
serde = "1.0.130"
serde_json = "1.0.66"
serde_with = "1.10.0"
thiserror = "1.0.29"
tracing = "0.1.28"
derive_builder = "0.20.0"
http = "1.1.0"
reqwest = { version = "0.12.4", default-features = false, features = [
"rustls-tls",
] }
rustify = "0.6.0"
rustify_derive = "0.5.3"
serde = "1.0.203"
serde_json = "1.0.117"
serde_with = "3.9.0"
thiserror = "1.0.59"
tracing = "0.1.40"
url = "2.2.2"

[dev-dependencies]
dockertest-server = { version = "0.1.4", features=["hashi"] }
env_logger = "0.9.0"
dockertest-server = { version = "0.1.4", features = ["hashi"] }
env_logger = "0.11.3"
hyper = "1.4.1"
futures = "0.3.17"
test-log = { version = "0.2.8", features = ["trace"] }
tokio = { version = "1.12.0", features = ["full"] }
tokio-test = "0.4.2"
tracing-subscriber = {version = "0.2.17", default-features = false, features = ["env-filter", "fmt"]}
test-log = { version = "0.2.16", features = ["trace"] }
tokio = { version = "1.38.0", features = ["full"] }
tokio-test = "0.4.4"
tracing-subscriber = { version = "0.3.18", default-features = false, features = [
"env-filter",
"fmt",
] }
4 changes: 2 additions & 2 deletions consulrs_derive/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ proc-macro = true

[dependencies]
syn = "1.0"
quote = "1.0"
quote = "1.0.36"
synstructure = "0.12.5"
proc-macro2 = "1.0.28"
proc-macro2 = "1.0.85"
2 changes: 1 addition & 1 deletion consulrs_derive/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ impl Error {
/// This uses [quote_spanned!] in order to provide more accurate information
/// to the compiler about the exact location of the error.
pub fn new(span: Span, message: &str) -> Error {
Error(quote_spanned! { span =>
Error(quote_spanned! {span=>
compile_error!(#message);
})
}
Expand Down
3 changes: 2 additions & 1 deletion src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ pub use crate::api::features::Features;

pub mod catalog;
pub mod check;
pub mod configuration;
pub mod connect;
pub mod features;
pub mod health;
Expand Down Expand Up @@ -205,7 +206,7 @@ where
}

/// Parses commonly found header fields out of response headers.
fn parse_headers<T>(headers: &http::HeaderMap) -> ApiResponseBuilder<T>
fn parse_headers<T>(headers: &reqwest::header::HeaderMap) -> ApiResponseBuilder<T>
where
T: DeserializeOwned + Send + Sync,
{
Expand Down
2 changes: 1 addition & 1 deletion src/api/check/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ pub struct AgentServiceCheck {
#[serde(rename = "TLSServerName")]
pub tls_server_name: Option<String>,
#[serde(rename = "TLSSkipVerify")]
pub tlk_skip_verify: Option<String>,
pub tls_skip_verify: Option<bool>,
#[serde(rename = "TTL")]
pub ttl: Option<String>,
}
Expand Down
2 changes: 1 addition & 1 deletion src/api/check/requests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ pub struct RegisterCheckRequest {
#[serde(rename = "TLSServerName")]
pub tls_server_name: Option<String>,
#[serde(rename = "TLSSkipVerify")]
pub tls_skip_verify: Option<String>,
pub tls_skip_verify: Option<bool>,
#[serde(rename = "TTL")]
pub ttl: Option<String>,
}
Expand Down
2 changes: 2 additions & 0 deletions src/api/configuration.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pub mod common;
pub mod requests;
26 changes: 26 additions & 0 deletions src/api/configuration/common.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use std::fmt::Debug;

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

#[skip_serializing_none]
#[derive(Builder, Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct AgentConfig {
pub datacenter: Option<String>,
pub node_name: Option<String>,
#[serde(rename = "NodeID")]
pub node_id: Option<String>,
pub server: Option<bool>,
pub revision: Option<String>,
pub version: Option<String>,
}
25 changes: 25 additions & 0 deletions src/api/configuration/requests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
use crate::api::Features;

use super::common::AgentConfiguration;
use consulrs_derive::QueryEndpoint;
use derive_builder::Builder;
use rustify_derive::Endpoint;
use serde::Serialize;
use std::fmt::Debug;

/// ## Read configuration
/// This endpoint returns the configuration and member information of the local agent.
///
/// * Path: agent/self
/// * Method: GET
/// * Response: [AgentConfiguration]
/// * Reference: https://developer.hashicorp.com/consul/api-docs/agent#read-configuration
#[derive(Builder, Debug, Default, Endpoint, QueryEndpoint)]
#[endpoint(path = "agent/self", response = "AgentConfiguration", builder = "true")]
#[builder(setter(into, strip_option), default)]
pub struct ReadConfigurationRequest {
#[endpoint(skip)]
pub features: Option<Features>,
#[endpoint(query)]
pub ns: Option<String>,
}
3 changes: 2 additions & 1 deletion src/api/kv/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ impl TryInto<Vec<u8>> for Base64String {
type Error = ClientError;

fn try_into(self) -> Result<Vec<u8>, Self::Error> {
base64::decode(&self.0).map_err(|e| ClientError::Base64DecodeError { source: e })
base64::Engine::decode(&base64::engine::general_purpose::STANDARD, self.0)
.map_err(|e| ClientError::Base64DecodeError { source: e })
}
}

Expand Down
25 changes: 25 additions & 0 deletions src/configuration.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
use crate::{
api::{
self,
configuration::{
common::AgentConfiguration,
requests::{ReadConfigurationRequest, ReadConfigurationRequestBuilder},
},
ApiResponse,
},
client::Client,
error::ClientError,
};

/// Reads the configuration and member information of the local agent.
///
/// See [ReadConfigurationRequest]
#[instrument(skip(client, opts), err)]
pub async fn read(
client: &impl Client,
opts: Option<&mut ReadConfigurationRequestBuilder>,
) -> Result<ApiResponse<AgentConfiguration>, ClientError> {
let mut t = ReadConfigurationRequest::builder();
let endpoint = opts.unwrap_or(&mut t).build().unwrap();
api::exec_with_result(client, endpoint).await
}
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ pub mod api;
pub mod catalog;
pub mod check;
pub mod client;
pub mod configuration;
pub mod error;
pub mod health;
pub mod kv;
Expand Down