pub mod contains;
pub mod email;
pub mod length;
pub mod pattern;
pub mod range;
pub mod required;
pub mod url;
pub use contains::validate_contains;
pub use email::validate_email;
pub use length::validate_length;
pub use pattern::validate_pattern;
pub use range::validate_range;
pub use required::validate_required;
pub use url::validate_url;
pub trait HasLength {
fn rusdantic_length(&self) -> usize;
fn rusdantic_length_unit(&self) -> &'static str {
"items"
}
}
impl HasLength for String {
fn rusdantic_length(&self) -> usize {
self.chars().count()
}
fn rusdantic_length_unit(&self) -> &'static str {
"characters"
}
}
impl HasLength for &str {
fn rusdantic_length(&self) -> usize {
self.chars().count()
}
fn rusdantic_length_unit(&self) -> &'static str {
"characters"
}
}
impl<T> HasLength for Vec<T> {
fn rusdantic_length(&self) -> usize {
self.len()
}
}
impl<T: std::hash::Hash + Eq> HasLength for std::collections::HashSet<T> {
fn rusdantic_length(&self) -> usize {
self.len()
}
}
impl<T: Ord> HasLength for std::collections::BTreeSet<T> {
fn rusdantic_length(&self) -> usize {
self.len()
}
}
impl<K: std::hash::Hash + Eq, V> HasLength for std::collections::HashMap<K, V> {
fn rusdantic_length(&self) -> usize {
self.len()
}
}
impl<K: Ord, V> HasLength for std::collections::BTreeMap<K, V> {
fn rusdantic_length(&self) -> usize {
self.len()
}
}
impl<T> HasLength for std::collections::VecDeque<T> {
fn rusdantic_length(&self) -> usize {
self.len()
}
}
impl<T> HasLength for std::collections::LinkedList<T> {
fn rusdantic_length(&self) -> usize {
self.len()
}
}
pub trait AsStr {
fn as_str_ref(&self) -> &str;
}
impl AsStr for String {
fn as_str_ref(&self) -> &str {
self.as_str()
}
}
impl AsStr for &str {
fn as_str_ref(&self) -> &str {
self
}
}
impl AsStr for std::borrow::Cow<'_, str> {
fn as_str_ref(&self) -> &str {
self.as_ref()
}
}