nyauser_types/
regex_wrapper.rs1use std::borrow::Cow;
2use std::ops::Deref;
3
4use regex::Regex;
5use serde::{de::Unexpected, Deserialize, Serialize};
6
7#[derive(Clone, Debug)]
8pub struct RegexWrapper(pub Regex);
9
10impl PartialEq for RegexWrapper {
11 fn eq(&self, other: &Self) -> bool {
12 self.0.as_str() == other.0.as_str()
13 }
14}
15
16impl Serialize for RegexWrapper {
17 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
18 where
19 S: serde::Serializer,
20 {
21 self.0.as_str().serialize(serializer)
22 }
23}
24
25impl<'de> Deserialize<'de> for RegexWrapper {
26 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
27 where
28 D: serde::Deserializer<'de>,
29 {
30 let r: Cow<'de, str> = Deserialize::deserialize(deserializer)?;
31
32 Ok(Self(Regex::new(&r).map_err(|e| {
33 serde::de::Error::invalid_value(Unexpected::Str(&r), &e.to_string().deref())
34 })?))
35 }
36}
37
38impl Deref for RegexWrapper {
39 type Target = Regex;
40
41 fn deref(&self) -> &Self::Target {
42 &self.0
43 }
44}