use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum BehavioralBotReason {
RequestCountExceeded,
GhostSession,
NoJavascript,
}
impl BehavioralBotReason {
pub const ALL: [Self; 3] = [
Self::RequestCountExceeded,
Self::GhostSession,
Self::NoJavascript,
];
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::RequestCountExceeded => "request_count_exceeded",
Self::GhostSession => "ghost_session",
Self::NoJavascript => "no_javascript",
}
}
#[must_use]
pub const fn score(self) -> i32 {
match self {
Self::RequestCountExceeded => 30,
Self::GhostSession => 35,
Self::NoJavascript => 20,
}
}
#[must_use]
pub fn parse(value: &str) -> Option<Self> {
Self::ALL
.into_iter()
.find(|reason| reason.as_str() == value)
}
}
impl std::fmt::Display for BehavioralBotReason {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}