use crate::Rational;
use crate::gaussian_rational::{
ComparableGaussianRational, ComparableGaussianRationalRef, GaussianRational,
};
use core::fmt::{Debug, Display, Formatter, Result, Write};
fn fmt_unsigned_imaginary_term(q: &Rational, f: &mut Formatter) -> Result {
let n = q.numerator_ref();
let d = q.denominator_ref();
if *n != 1u32 {
Display::fmt(n, f)?;
}
f.write_char('i')?;
if *d != 1u32 {
f.write_char('/')?;
Display::fmt(d, f)?;
}
Ok(())
}
impl Display for GaussianRational {
fn fmt(&self, f: &mut Formatter) -> Result {
if self.imaginary == 0u32 {
return Display::fmt(&self.real, f);
}
if self.real != 0u32 {
Display::fmt(&self.real, f)?;
if self.imaginary > 0u32 {
f.write_char('+')?;
} else {
f.write_char('-')?;
}
} else if self.imaginary < 0u32 {
f.write_char('-')?;
}
fmt_unsigned_imaginary_term(&self.imaginary, f)
}
}
impl Debug for GaussianRational {
#[inline]
fn fmt(&self, f: &mut Formatter) -> Result {
Display::fmt(self, f)
}
}
impl Display for ComparableGaussianRational {
#[inline]
fn fmt(&self, f: &mut Formatter) -> Result {
Display::fmt(&self.0, f)
}
}
impl Display for ComparableGaussianRationalRef<'_> {
#[inline]
fn fmt(&self, f: &mut Formatter) -> Result {
Display::fmt(self.0, f)
}
}