use alloc::{borrow::Cow, string::String};
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct IcalFloat<'a>(pub Cow<'a, str>);
impl IcalFloat<'_> {
pub fn get(&self) -> Option<f64> {
self.0.parse().ok()
}
}
impl<'a> From<&'a str> for IcalFloat<'a> {
fn from(value: &'a str) -> Self {
Self(Cow::Borrowed(value))
}
}
impl From<String> for IcalFloat<'_> {
fn from(value: String) -> Self {
Self(Cow::Owned(value))
}
}
impl<'a> From<Cow<'a, str>> for IcalFloat<'a> {
fn from(value: Cow<'a, str>) -> Self {
Self(value)
}
}
#[cfg(test)]
mod tests {
use crate::value::float::IcalFloat;
#[test]
fn get_parses_signed_float() {
assert_eq!(IcalFloat::from("-12.5").get(), Some(-12.5));
assert_eq!(IcalFloat::from("abc").get(), None);
}
}