use core::str::FromStr;
use crate::helpers::size_test;
use crate::pattern::{runtime, PatternError, PatternItem};
size_test!(DateTimePattern, date_time_pattern_size, 32);
#[doc = date_time_pattern_size!()]
#[derive(Debug)]
pub struct DateTimePattern {
pattern: runtime::Pattern<'static>,
}
impl DateTimePattern {
pub fn try_from_pattern_str(pattern_str: &str) -> Result<Self, PatternError> {
let pattern = runtime::Pattern::from_str(pattern_str)?;
Ok(Self { pattern })
}
#[doc(hidden)] pub fn from_runtime_pattern(pattern: runtime::Pattern<'static>) -> Self {
Self { pattern }
}
pub(crate) fn iter_items(&self) -> impl Iterator<Item = PatternItem> + '_ {
self.pattern.items.iter()
}
pub(crate) fn as_borrowed(&self) -> DateTimePatternBorrowed {
DateTimePatternBorrowed(&self.pattern)
}
}
impl FromStr for DateTimePattern {
type Err = PatternError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::try_from_pattern_str(s)
}
}
impl PartialEq for DateTimePattern {
fn eq(&self, other: &Self) -> bool {
self.as_borrowed().eq(&other.as_borrowed())
}
}
impl Eq for DateTimePattern {}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub(crate) struct DateTimePatternBorrowed<'a>(pub(crate) &'a runtime::Pattern<'a>);