logid_core/logging/filter/
filter_builders.rs

1use crate::log_id::LogLevel;
2
3use super::{AddonFilter, FilterConfig, LogIdAddonFilter, LogIdModuleFilter};
4
5#[derive(Default, Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
6pub struct FilterConfigBuilder {
7    general_logging_enabled: bool,
8    general_level: LogLevel,
9    general_addons: Vec<AddonFilter>,
10    /// LogIds set with `on[LogId]`
11    allowed_global_ids: Vec<LogIdAddonFilter>,
12    allowed_modules: Vec<LogIdModuleFilter>,
13}
14
15impl FilterConfigBuilder {
16    /// Creates a new builder for [`FilterConfig`].
17    pub fn new(level: LogLevel) -> Self {
18        Self {
19            general_logging_enabled: true,
20            general_level: level,
21            ..Default::default()
22        }
23    }
24
25    /// Disable logging in general.
26    pub fn disabled_general_logging(mut self) -> Self {
27        self.general_logging_enabled = false;
28        self
29    }
30
31    /// Add addons allowed by the filter.
32    pub fn allowed_addons<I>(mut self, addons: I) -> Self
33    where
34        I: IntoIterator,
35        I::Item: Into<AddonFilter>,
36    {
37        self.general_addons
38            .extend(addons.into_iter().map(Into::into));
39        self
40    }
41
42    /// Add LogIDs allowed by the filter.
43    pub fn global_ids<I>(mut self, global_ids: I) -> Self
44    where
45        I: IntoIterator,
46        I::Item: Into<LogIdAddonFilter>,
47    {
48        self.allowed_global_ids
49            .extend(global_ids.into_iter().map(Into::into));
50        self
51    }
52
53    /// Add modules allowed by the filter.
54    pub fn modules<I>(mut self, modules: I) -> Self
55    where
56        I: IntoIterator,
57        I::Item: Into<LogIdModuleFilter>,
58    {
59        self.allowed_modules
60            .extend(modules.into_iter().map(Into::into));
61        self
62    }
63
64    /// Build [`FilterConfig`] with configuration constructed using the builder.
65    pub fn build(self) -> FilterConfig {
66        FilterConfig {
67            general_logging_enabled: self.general_logging_enabled,
68            general_level: self.general_level,
69            general_addons: self.general_addons,
70            allowed_global_ids: self.allowed_global_ids,
71            allowed_modules: self.allowed_modules,
72        }
73    }
74}