as_derive_utils 0.11.0

private derive utilities used by abi_stable and structural.
Documentation
use std::{
    cmp::{Eq, PartialEq},
    hash::{Hash, Hasher},
    ops::Deref,
};

use core_extensions::SelfOps;
use regex::Regex;
use serde::de::{Deserialize, Deserializer, Error as deError};

#[derive(Clone, Debug)]
pub struct RegexWrapper(pub Regex);

impl From<Regex> for RegexWrapper {
    fn from(t: Regex) -> Self {
        RegexWrapper(t)
    }
}

impl Hash for RegexWrapper {
    #[inline]
    fn hash<H: Hasher>(&self, state: &mut H) {
        self.0.as_str().hash(state)
    }
}

impl Eq for RegexWrapper {}
impl PartialEq for RegexWrapper {
    #[inline]
    fn eq(&self, other: &Self) -> bool {
        self.0.as_str() == other.0.as_str()
    }
}

impl Deref for RegexWrapper {
    type Target = Regex;

    #[inline]
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

impl<'de> Deserialize<'de> for RegexWrapper {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>,
    {
        <String>::deserialize(deserializer)?
            .piped(|v| Regex::new(&v))
            .map(RegexWrapper)
            .map_err(|e| format!("{}", e))
            .map_err(D::Error::custom)
    }
}