use std::net::IpAddr;
use smol_str::SmolStr;
#[derive(Clone, Debug, PartialEq)]
pub struct CharsValue(pub(crate) SmolStr);
#[derive(Clone, Debug, PartialEq)]
pub struct PipeNot {
pub(crate) inner: Box<crate::ast::WplFun>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct Has;
#[derive(Clone, Debug, PartialEq)]
pub struct TargetHas {
pub(crate) target: Option<SmolStr>,
}
impl TargetHas {
pub fn new<S: Into<SmolStr>>(target: S) -> Self {
Self {
target: Some(target.into()),
}
}
pub fn for_active_field() -> Self {
Self { target: None }
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct CharsHas {
pub(crate) value: SmolStr,
}
#[derive(Clone, Debug, PartialEq)]
pub struct TargetCharsHas {
pub(crate) target: Option<SmolStr>,
pub(crate) value: SmolStr,
}
#[derive(Clone, Debug, PartialEq)]
pub struct CharsNotHas {
pub(crate) value: SmolStr,
}
#[derive(Clone, Debug, PartialEq)]
pub struct TargetCharsNotHas {
pub(crate) target: Option<SmolStr>,
pub(crate) value: SmolStr,
}
#[derive(Clone, Debug, PartialEq)]
pub struct CharsIn {
pub(crate) value: Vec<SmolStr>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct TargetCharsIn {
pub(crate) target: Option<SmolStr>,
pub(crate) value: Vec<SmolStr>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct DigitHas {
pub(crate) value: i64,
}
#[derive(Clone, Debug, PartialEq)]
pub struct TargetDigitHas {
pub(crate) target: Option<SmolStr>,
pub(crate) value: i64,
}
#[derive(Clone, Debug, PartialEq)]
pub struct DigitIn {
pub(crate) value: Vec<i64>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct TargetDigitIn {
pub(crate) target: Option<SmolStr>,
pub(crate) value: Vec<i64>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct IpIn {
pub(crate) value: Vec<IpAddr>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct TargetIpIn {
pub(crate) target: Option<SmolStr>,
pub(crate) value: Vec<IpAddr>,
}
#[derive(Clone, Default)]
#[allow(dead_code)]
pub struct StubFun {}
#[derive(Clone, Debug, PartialEq)]
pub struct JsonUnescape {}
#[derive(Clone, Debug, PartialEq)]
pub struct Base64Decode {}
#[derive(Clone, Debug, PartialEq)]
pub struct TakeField {
pub(crate) target: SmolStr,
}
#[derive(Clone, Debug, PartialEq)]
pub struct SelectLast {}
#[derive(Clone, Debug, PartialEq)]
pub struct CharsNotHasArg {
pub(crate) value: SmolStr,
}
#[derive(Clone, Debug, PartialEq)]
pub struct CharsInArg {
pub(crate) value: Vec<SmolStr>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct DigitHasArg {
pub(crate) value: i64,
}
#[derive(Clone, Debug, PartialEq)]
pub struct DigitInArg {
pub(crate) value: Vec<i64>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct DigitRange {
pub(crate) begin: i64,
pub(crate) end: i64,
}
#[derive(Clone, Debug, PartialEq)]
pub struct IpInArg {
pub(crate) value: Vec<IpAddr>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct HasArg;
#[derive(Clone, Debug, PartialEq)]
pub struct ReplaceFunc {
pub(crate) target: SmolStr,
pub(crate) value: SmolStr,
}
#[derive(Clone, Debug, PartialEq)]
pub struct RegexMatch {
pub(crate) pattern: SmolStr, }
#[derive(Clone, Debug, PartialEq)]
pub struct StartsWith {
pub(crate) prefix: SmolStr, }
pub(crate) fn normalize_target(target: SmolStr) -> Option<SmolStr> {
if target == "_" { None } else { Some(target) }
}