spdlog_internal/pattern_parser/
mod.rs1use std::borrow::Cow;
2
3use strum::IntoEnumIterator;
4use strum_macros::{EnumDiscriminants, EnumIter, EnumString, IntoStaticStr};
5
6pub mod error;
7mod helper;
8pub mod parse;
9mod registry;
10
11pub use error::{Error, Result};
12pub use registry::{check_custom_pattern_names, PatternRegistry};
13
14#[derive(
15 Clone, Copy, Debug, Eq, PartialEq, IntoStaticStr, EnumDiscriminants, EnumIter, EnumString,
16)]
17#[strum_discriminants(derive(IntoStaticStr))]
18pub enum BuiltInFormatterInner {
19 #[strum(serialize = "weekday_name")]
20 AbbrWeekdayName,
21 #[strum(serialize = "weekday_name_full")]
22 WeekdayName,
23 #[strum(serialize = "month_name")]
24 AbbrMonthName,
25 #[strum(serialize = "month_name_full")]
26 MonthName,
27 #[strum(serialize = "datetime")]
28 FullDateTime,
29 #[strum(serialize = "year_short")]
30 ShortYear,
31 #[strum(serialize = "year")]
32 Year,
33 #[strum(serialize = "date_short")]
34 ShortDate,
35 #[strum(serialize = "date")]
36 Date,
37 #[strum(serialize = "month")]
38 Month,
39 #[strum(serialize = "day")]
40 Day,
41 #[strum(serialize = "hour")]
42 Hour,
43 #[strum(serialize = "hour_12")]
44 Hour12,
45 #[strum(serialize = "minute")]
46 Minute,
47 #[strum(serialize = "second")]
48 Second,
49 #[strum(serialize = "millisecond")]
50 Millisecond,
51 #[strum(serialize = "microsecond")]
52 Microsecond,
53 #[strum(serialize = "nanosecond")]
54 Nanosecond,
55 #[strum(serialize = "am_pm")]
56 AmPm,
57 #[strum(serialize = "time_12")]
58 Time12,
59 #[strum(serialize = "time_short")]
60 ShortTime,
61 #[strum(serialize = "time")]
62 Time,
63 #[strum(serialize = "tz_offset")]
64 TzOffset,
65 #[strum(serialize = "unix_timestamp")]
66 UnixTimestamp,
67 #[strum(serialize = "full")]
68 Full,
69 #[strum(serialize = "level")]
70 Level,
71 #[strum(serialize = "level_short")]
72 ShortLevel,
73 #[strum(serialize = "source")]
74 Source,
75 #[strum(serialize = "file_name")]
76 SourceFilename,
77 #[strum(serialize = "file")]
78 SourceFile,
79 #[strum(serialize = "line")]
80 SourceLine,
81 #[strum(serialize = "column")]
82 SourceColumn,
83 #[strum(serialize = "module_path")]
84 SourceModulePath,
85 #[strum(serialize = "logger")]
86 LoggerName,
87 #[strum(serialize = "payload")]
88 Payload,
89 #[strum(serialize = "pid")]
90 ProcessId,
91 #[strum(serialize = "tid")]
92 ThreadId,
93 #[strum(serialize = "eol")]
94 Eol,
95}
96
97#[derive(Clone, Debug, Eq, PartialEq)]
98pub struct BuiltInFormatter(BuiltInFormatterInner);
99
100impl BuiltInFormatter {
101 pub fn iter() -> impl Iterator<Item = BuiltInFormatter> {
102 BuiltInFormatterInner::iter().map(BuiltInFormatter)
103 }
104
105 pub fn struct_name(&self) -> &'static str {
106 BuiltInFormatterInnerDiscriminants::from(self.0).into()
107 }
108
109 pub fn placeholder(&self) -> &'static str {
110 self.0.into()
111 }
112
113 pub fn inner(&self) -> BuiltInFormatterInner {
114 self.0
115 }
116}
117
118#[derive(Clone, Debug, Eq, PartialEq)]
119pub enum PatternKind<F> {
120 BuiltIn(BuiltInFormatter),
121 Custom {
122 placeholder: Cow<'static, str>,
123 factory: F,
124 },
125}
126
127impl<F> PatternKind<F> {
128 pub(crate) fn placeholder(&self) -> &str {
129 match self {
130 PatternKind::BuiltIn(f) => f.placeholder(),
131 PatternKind::Custom { placeholder, .. } => placeholder,
132 }
133 }
134
135 pub(crate) fn to_factory_erased(&self) -> PatternKind<()> {
136 match self {
137 PatternKind::BuiltIn(b) => PatternKind::BuiltIn(b.clone()),
138 PatternKind::Custom { placeholder, .. } => PatternKind::Custom {
139 placeholder: placeholder.clone(),
140 factory: (),
141 },
142 }
143 }
144}