use {
super::{AttrExpression, Expression},
crate::domain::units::{conversions::*, Unit},
cssparser::ToCss,
std::{fmt, rc::Rc},
};
#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub struct AttrFunction(pub Rc<AttrExpression>);
impl ToCss for AttrFunction {
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result {
dest.write_str("attr(")?;
self.0.to_css(dest)?;
dest.write_char(')')
}
}
impl<U: Unit> Expression<U> for AttrFunction {
#[inline(always)]
fn evaluate<
Conversion: FontRelativeLengthConversion<U::Number>
+ ViewportPercentageLengthConversion<U::Number>
+ PercentageConversion<U::Number>
+ AttributeConversion<U>
+ CssVariableConversion,
>(
&self,
conversion: &Conversion,
) -> Option<U::Number> {
self.0.evaluate(conversion)
}
}