Skip to main content

dnslib/core/dns/
logs.rs

1use std::future::Future;
2
3use crate::core::error::Result;
4
5#[derive(
6    Debug,
7    Clone,
8    Copy,
9    PartialEq,
10    Eq,
11    PartialOrd,
12    Ord,
13    serde::Serialize,
14    serde::Deserialize,
15    clap::ValueEnum,
16)]
17#[serde(rename_all = "lowercase")]
18pub enum LogLevel {
19    Trace,
20    Debug,
21    Info,
22    Warning,
23    Error,
24    Critical,
25}
26
27#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
28pub struct LogLine {
29    pub timestamp: String,
30    pub level: LogLevel,
31    pub title: Option<String>,
32    pub message: String,
33}
34
35#[derive(Debug, Clone, Default)]
36pub struct LogsOptions {
37    pub lines: Option<u32>,
38    pub start: Option<String>,
39    pub end: Option<String>,
40    pub level: Option<LogLevel>,
41}
42
43pub trait LogsRead {
44    fn get_logs(
45        &self,
46        options: LogsOptions,
47    ) -> impl Future<Output = Result<Vec<LogLine>>> + Send + '_;
48}
49
50pub async fn get_logs<C: LogsRead + ?Sized>(
51    client: &C,
52    options: LogsOptions,
53) -> Result<Vec<LogLine>> {
54    client.get_logs(options).await
55}