x509_parser/validate/
loggers.rs

1pub trait Logger {
2    fn warn(&mut self, message: &str);
3
4    fn err(&mut self, message: &str);
5}
6
7/// Simple Logger for [`Validator`](crate::validate::Validator) trait, storing messages in `Vec`
8#[derive(Debug, Default)]
9pub struct VecLogger {
10    warnings: Vec<String>,
11    errors: Vec<String>,
12}
13
14impl VecLogger {
15    /// Get stored warnings
16    pub fn warnings(&self) -> &[String] {
17        &self.warnings
18    }
19
20    /// Get stored errors
21    pub fn errors(&self) -> &[String] {
22        &self.errors
23    }
24}
25
26impl Logger for VecLogger {
27    fn warn(&mut self, message: &str) {
28        self.warnings.push(message.to_owned())
29    }
30
31    fn err(&mut self, message: &str) {
32        self.errors.push(message.to_owned())
33    }
34}
35
36/// Simple Logger for [`Validator`](crate::validate::Validator) trait, printing messages to `stderr`
37#[derive(Debug, Default)]
38pub struct StderrLogger;
39
40impl Logger for StderrLogger {
41    fn warn(&mut self, message: &str) {
42        eprintln!("[W] {message}");
43    }
44
45    fn err(&mut self, message: &str) {
46        eprintln!("[E] {message}");
47    }
48}
49
50/// Simple Logger for [`Validator`](crate::validate::Validator) trait, using closures for `warn`/`err`.
51#[derive(Debug, Default)]
52pub struct CallbackLogger<W, E>
53where
54    W: FnMut(&str),
55    E: FnMut(&str),
56{
57    warn: W,
58    err: E,
59}
60
61impl<W, E> CallbackLogger<W, E>
62where
63    W: FnMut(&str),
64    E: FnMut(&str),
65{
66    pub fn new(warn: W, err: E) -> Self {
67        CallbackLogger { warn, err }
68    }
69}
70
71impl<W, E> Logger for CallbackLogger<W, E>
72where
73    W: FnMut(&str),
74    E: FnMut(&str),
75{
76    fn warn(&mut self, message: &str) {
77        (self.warn)(message);
78    }
79
80    fn err(&mut self, message: &str) {
81        (self.err)(message);
82    }
83}