protify 0.1.4

A Rust-first protobuf framework to generate packages from rust code, with validation included
Documentation
#![allow(clippy::ref_option)]

#[cfg(feature = "regex")]
pub(crate) mod regex_serde {
	use crate::*;

	use regex::Regex;
	use serde::{Deserialize, Deserializer, Serializer};

	pub fn serialize<S>(regex: &Option<Regex>, serializer: S) -> Result<S::Ok, S::Error>
	where
		S: Serializer,
	{
		match regex {
			Some(re) => serializer.serialize_str(re.as_str()),
			None => serializer.serialize_none(),
		}
	}

	#[track_caller]
	pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Regex>, D::Error>
	where
		D: Deserializer<'de>,
	{
		let s: Option<String> = Option::deserialize(deserializer)?;
		match s {
			Some(pattern) => Ok(Some(Regex::new(&pattern).unwrap())),
			None => Ok(None),
		}
	}
}

#[cfg(feature = "regex")]
pub(crate) mod bytes_regex_serde {
	use crate::*;

	use regex::bytes::Regex;
	use serde::{Deserialize, Deserializer, Serializer};

	pub fn serialize<S>(regex: &Option<Regex>, serializer: S) -> Result<S::Ok, S::Error>
	where
		S: Serializer,
	{
		match regex {
			Some(re) => serializer.serialize_str(re.as_str()),
			None => serializer.serialize_none(),
		}
	}

	#[track_caller]
	pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Regex>, D::Error>
	where
		D: Deserializer<'de>,
	{
		let s: Option<String> = Option::deserialize(deserializer)?;
		match s {
			Some(pattern) => Ok(Some(Regex::new(&pattern).unwrap())),
			None => Ok(None),
		}
	}
}