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