north_consul/
connect_ca.rs1use async_trait::async_trait;
2use std::collections::HashMap;
3
4use serde_json::Value;
5
6use crate::errors::Result;
7use crate::request::{get, put};
8use crate::{Client, QueryMeta, QueryOptions, WriteMeta, WriteOptions};
9
10#[derive(Default, Serialize, Deserialize, Debug)]
11#[serde(default)]
12#[allow(clippy::upper_case_acronyms)]
13pub struct CAConfig {
14 Provider: String,
15 Config: Value,
16 CreateIndex: u64,
17 ModifyIndex: u64,
18}
19
20#[derive(Default, Serialize, Deserialize, Debug)]
21#[serde(default)]
22#[allow(clippy::upper_case_acronyms)]
23pub struct CARootList {
24 ActiveRootID: String,
25 TrustDomain: String,
26 Roots: Vec<CARoot>,
27}
28
29#[derive(Eq, Default, PartialEq, Serialize, Deserialize, Debug)]
30#[serde(default)]
31#[allow(clippy::upper_case_acronyms)]
32pub struct CARoot {
33 ID: String,
34 Name: String,
35 RootCert: String,
36 Active: bool,
37 CreateIndex: u64,
38 ModifyIndex: u64,
39}
40
41#[allow(clippy::upper_case_acronyms)]
42#[async_trait]
43pub trait ConnectCA {
44 async fn ca_roots(&self, q: Option<&QueryOptions>) -> Result<(CARootList, QueryMeta)>;
45 async fn ca_get_config(&self, q: Option<&QueryOptions>) -> Result<(CAConfig, QueryMeta)>;
46 async fn ca_set_config(
47 &self,
48 conf: &CAConfig,
49 q: Option<&WriteOptions>,
50 ) -> Result<((), WriteMeta)>;
51}
52
53#[async_trait]
54impl ConnectCA for Client {
55 async fn ca_roots(&self, q: Option<&QueryOptions>) -> Result<(CARootList, QueryMeta)> {
57 get("/v1/connect/ca/roots", &self.config, HashMap::new(), q).await
58 }
59
60 async fn ca_get_config(&self, q: Option<&QueryOptions>) -> Result<(CAConfig, QueryMeta)> {
62 get(
63 "/v1/connect/ca/configuration",
64 &self.config,
65 HashMap::new(),
66 q,
67 )
68 .await
69 }
70
71 async fn ca_set_config(
73 &self,
74 conf: &CAConfig,
75 q: Option<&WriteOptions>,
76 ) -> Result<((), WriteMeta)> {
77 put(
78 "/v1/connect/ca/configuration",
79 Some(conf),
80 &self.config,
81 HashMap::new(),
82 q,
83 )
84 .await
85 }
86}