Skip to main content

systemprompt_logging/models/
log_filter.rs

1//! Filter parameters for log queries.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use chrono::{DateTime, Utc};
7
8#[derive(Debug, Clone, Default)]
9pub struct LogFilter {
10    page: i32,
11    per_page: i32,
12    level: Option<String>,
13    module: Option<String>,
14    message: Option<String>,
15    since: Option<DateTime<Utc>>,
16}
17
18impl LogFilter {
19    #[must_use]
20    pub const fn new(page: i32, per_page: i32) -> Self {
21        Self {
22            page,
23            per_page,
24            level: None,
25            module: None,
26            message: None,
27            since: None,
28        }
29    }
30
31    #[must_use]
32    pub fn with_level(mut self, level: impl Into<String>) -> Self {
33        self.level = Some(level.into());
34        self
35    }
36
37    #[must_use]
38    pub fn with_module(mut self, module: impl Into<String>) -> Self {
39        self.module = Some(module.into());
40        self
41    }
42
43    #[must_use]
44    pub fn with_message(mut self, message: impl Into<String>) -> Self {
45        self.message = Some(message.into());
46        self
47    }
48
49    #[must_use]
50    pub const fn with_since(mut self, since: DateTime<Utc>) -> Self {
51        self.since = Some(since);
52        self
53    }
54
55    #[must_use]
56    pub const fn page(&self) -> i32 {
57        self.page
58    }
59
60    #[must_use]
61    pub const fn per_page(&self) -> i32 {
62        self.per_page
63    }
64
65    #[must_use]
66    pub fn level(&self) -> Option<&str> {
67        self.level.as_deref()
68    }
69
70    #[must_use]
71    pub fn module(&self) -> Option<&str> {
72        self.module.as_deref()
73    }
74
75    #[must_use]
76    pub fn message(&self) -> Option<&str> {
77        self.message.as_deref()
78    }
79
80    #[must_use]
81    pub const fn since(&self) -> Option<DateTime<Utc>> {
82        self.since
83    }
84}