use std::borrow::Cow;
pub fn is_matching_builtin_spacing(value: &str) -> bool {
value == "px"
|| value.parse::<f64>().is_ok()
|| value
.split_once('/')
.is_some_and(|(a, b)| a.parse::<usize>().is_ok() && b.parse::<usize>().is_ok())
}
pub fn get(value: &str, is_negative: bool) -> Option<Cow<'_, str>> {
if value == "px" {
if is_negative {
Some(Cow::from("-1px"))
} else {
Some(Cow::from("1px"))
}
} else if value == "0" {
Some(Cow::from("0px"))
} else if let Some((a, b)) = value.split_once('/') {
let a = a.parse::<usize>().ok()?;
let b = b.parse::<usize>().ok()?;
#[allow(clippy::cast_precision_loss)]
if is_negative {
Some(Cow::from(format!(
"{}%",
(1_000_000. * 100. * (-(a as f64) / b as f64)).round() / 1_000_000.
)))
} else {
Some(Cow::from(format!(
"{}%",
(1_000_000. * 100. * (a as f64 / b as f64)).round() / 1_000_000.
)))
}
} else {
let value = if is_negative {
-value.parse::<f64>().ok()? / 4.
} else {
value.parse::<f64>().ok()? / 4.
};
Some(Cow::from(format!("{value}rem")))
}
}