use crate::num::basic::unsigneds::PrimitiveUnsigned;
use crate::num::factorization::factor::Factors;
use crate::strings::typst::ToTypst;
use core::fmt::{Display, Formatter, Result, Write};
impl<T: PrimitiveUnsigned, const N: usize> ToTypst for Factors<T, N> {
fn fmt_typst(&self, f: &mut Formatter) -> Result {
let mut any = false;
for (factor, exponent) in self.clone() {
if any {
f.write_str(" times ")?;
}
any = true;
Display::fmt(&factor, f)?;
if exponent != 1 {
f.write_char('^')?;
if exponent < 10 {
Display::fmt(&exponent, f)?;
} else {
f.write_char('(')?;
Display::fmt(&exponent, f)?;
f.write_char(')')?;
}
}
}
if any {
Ok(())
} else {
f.write_char('1')
}
}
}