1use base64::Engine;
5use base64::engine::general_purpose::STANDARD;
6use reqwest::Method;
7use serde::Deserialize;
8
9use crate::client::request;
10use crate::swarm::Error;
11
12use super::DebugApi;
13
14#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
16pub struct Logger {
17 pub logger: String,
19 pub verbosity: String,
21 pub subsystem: String,
23 pub id: String,
25}
26
27#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
31pub struct LoggerListing {
32 #[serde(default)]
34 pub tree: serde_json::Value,
35 #[serde(default)]
37 pub loggers: Vec<Logger>,
38}
39
40impl DebugApi {
41 pub async fn loggers(&self) -> Result<LoggerListing, Error> {
43 let builder = request(&self.inner, Method::GET, "loggers")?;
44 self.inner.send_json(builder).await
45 }
46
47 pub async fn loggers_by_expression(&self, expression: &str) -> Result<LoggerListing, Error> {
51 let enc = STANDARD.encode(expression.as_bytes());
52 let path = format!("loggers/{enc}");
53 let builder = request(&self.inner, Method::GET, &path)?;
54 self.inner.send_json(builder).await
55 }
56
57 pub async fn set_logger_verbosity(&self, expression: &str) -> Result<(), Error> {
60 let enc = STANDARD.encode(expression.as_bytes());
61 let path = format!("loggers/{enc}");
62 let builder = request(&self.inner, Method::PUT, &path)?;
63 self.inner.send(builder).await?;
64 Ok(())
65 }
66}