move regex module into its own file
This commit is contained in:
parent
1d724b6972
commit
b321024533
3 changed files with 44 additions and 46 deletions
|
@ -12,7 +12,7 @@ use tracing::{error, info, instrument};
|
|||
#[derive(Deserialize, Serialize, Debug)]
|
||||
#[serde(untagged)]
|
||||
pub enum DomainMatcher {
|
||||
Regex(#[serde(with = "regex")] Regex),
|
||||
Regex(#[serde(with = "crate::regex")] Regex),
|
||||
Exact(String),
|
||||
}
|
||||
|
||||
|
@ -125,48 +125,3 @@ pub async fn load() -> eyre::Result<Config> {
|
|||
},
|
||||
}
|
||||
}
|
||||
|
||||
mod regex {
|
||||
use fancy_regex::Regex;
|
||||
use serde::{de::Visitor, Deserializer, Serialize, Serializer};
|
||||
|
||||
pub fn deserialize<'de, D>(d: D) -> Result<Regex, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
struct RegexVisitor;
|
||||
impl Visitor<'_> for RegexVisitor {
|
||||
type Value = Regex;
|
||||
|
||||
fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
write!(f, "a regex string starting and ending with slashes ('/')")
|
||||
}
|
||||
|
||||
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
let v = v
|
||||
.strip_prefix('/')
|
||||
.and_then(|v| v.strip_suffix('/'))
|
||||
.ok_or(serde::de::Error::invalid_value(
|
||||
serde::de::Unexpected::Str(v),
|
||||
&self,
|
||||
))?;
|
||||
|
||||
let regex = Regex::new(v);
|
||||
|
||||
regex.map_err(|err| serde::de::Error::custom(err))
|
||||
}
|
||||
}
|
||||
|
||||
d.deserialize_string(RegexVisitor)
|
||||
}
|
||||
|
||||
pub fn serialize<S>(value: &Regex, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
value.as_str().serialize(serializer)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#![feature(let_chains, io_error_more)]
|
||||
|
||||
mod config;
|
||||
mod regex;
|
||||
mod update_repo;
|
||||
|
||||
use std::sync::Arc;
|
||||
|
|
42
src/regex.rs
Normal file
42
src/regex.rs
Normal file
|
@ -0,0 +1,42 @@
|
|||
use fancy_regex::Regex;
|
||||
use serde::{de::Visitor, Deserializer, Serialize, Serializer};
|
||||
|
||||
pub fn deserialize<'de, D>(d: D) -> Result<Regex, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
struct RegexVisitor;
|
||||
impl Visitor<'_> for RegexVisitor {
|
||||
type Value = Regex;
|
||||
|
||||
fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
write!(f, "a regex string starting and ending with slashes ('/')")
|
||||
}
|
||||
|
||||
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
let v = v
|
||||
.strip_prefix('/')
|
||||
.and_then(|v| v.strip_suffix('/'))
|
||||
.ok_or(serde::de::Error::invalid_value(
|
||||
serde::de::Unexpected::Str(v),
|
||||
&self,
|
||||
))?;
|
||||
|
||||
let regex = Regex::new(v);
|
||||
|
||||
regex.map_err(|err| serde::de::Error::custom(err))
|
||||
}
|
||||
}
|
||||
|
||||
d.deserialize_string(RegexVisitor)
|
||||
}
|
||||
|
||||
pub fn serialize<S>(value: &Regex, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
value.as_str().serialize(serializer)
|
||||
}
|
Loading…
Reference in a new issue