use std::future::Future;
use crate::core::error::Result;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize, clap::ValueEnum)]
#[serde(rename_all = "lowercase")]
pub enum LogLevel {
Trace,
Debug,
Info,
Warning,
Error,
Critical,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct LogLine {
pub timestamp: String,
pub level: LogLevel,
pub title: Option<String>,
pub message: String,
}
#[derive(Debug, Clone, Default)]
pub struct LogsOptions {
pub lines: u32,
pub start: Option<String>,
pub end: Option<String>,
pub level: Option<LogLevel>,
}
pub trait LogsRead {
fn get_logs(
&self,
options: LogsOptions,
) -> impl Future<Output = Result<Vec<LogLine>>> + Send + '_;
}
pub async fn get_logs<C: LogsRead + ?Sized>(
client: &C,
options: LogsOptions,
) -> Result<Vec<LogLine>> {
client.get_logs(options).await
}