1use std::borrow::Cow;
2use std::fmt;
3
4use serde::Serialize;
5
6#[derive(Debug, Clone, Eq, PartialEq, Serialize, Hash)]
11pub enum FilterStatKey {
12 IpAddress,
14
15 ReleaseVersion,
17
18 ErrorMessage,
20
21 BrowserExtensions,
23
24 LegacyBrowsers,
26
27 Localhost,
29
30 WebCrawlers,
32
33 InvalidCsp,
35
36 FilteredTransactions,
38
39 DeniedName,
41
42 DisabledNamespace,
44
45 GenericFilter(String),
47}
48
49impl FilterStatKey {
62 pub fn name(self) -> Cow<'static, str> {
64 Cow::Borrowed(match self {
65 FilterStatKey::IpAddress => "ip-address",
66 FilterStatKey::ReleaseVersion => "release-version",
67 FilterStatKey::ErrorMessage => "error-message",
68 FilterStatKey::BrowserExtensions => "browser-extensions",
69 FilterStatKey::LegacyBrowsers => "legacy-browsers",
70 FilterStatKey::Localhost => "localhost",
71 FilterStatKey::WebCrawlers => "web-crawlers",
72 FilterStatKey::InvalidCsp => "invalid-csp",
73 FilterStatKey::FilteredTransactions => "filtered-transaction",
74 FilterStatKey::DeniedName => "denied-name",
75 FilterStatKey::DisabledNamespace => "disabled-namespace",
76 FilterStatKey::GenericFilter(filter_identifier) => {
77 return Cow::Owned(filter_identifier);
78 }
79 })
80 }
81}
82
83impl fmt::Display for FilterStatKey {
84 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
85 write!(f, "{}", self.clone().name())
86 }
87}
88
89impl<'a> TryFrom<&'a str> for FilterStatKey {
90 type Error = &'a str;
91
92 fn try_from(value: &'a str) -> Result<Self, Self::Error> {
93 Ok(match value {
94 "ip-address" => FilterStatKey::IpAddress,
95 "release-version" => FilterStatKey::ReleaseVersion,
96 "error-message" => FilterStatKey::ErrorMessage,
97 "browser-extensions" => FilterStatKey::BrowserExtensions,
98 "legacy-browsers" => FilterStatKey::LegacyBrowsers,
99 "localhost" => FilterStatKey::Localhost,
100 "web-crawlers" => FilterStatKey::WebCrawlers,
101 "invalid-csp" => FilterStatKey::InvalidCsp,
102 "filtered-transaction" => FilterStatKey::FilteredTransactions,
103 other => FilterStatKey::GenericFilter(other.to_string()),
104 })
105 }
106}