use crate::Rational;
use crate::gaussian_rational::GaussianRational;
use malachite_base::num::conversion::traits::ConvertibleFrom;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct RationalFromGaussianRationalError;
impl TryFrom<GaussianRational> for Rational {
type Error = RationalFromGaussianRationalError;
fn try_from(x: GaussianRational) -> Result<Self, Self::Error> {
if x.imaginary == 0u32 {
Ok(x.real)
} else {
Err(RationalFromGaussianRationalError)
}
}
}
impl TryFrom<&GaussianRational> for Rational {
type Error = RationalFromGaussianRationalError;
fn try_from(x: &GaussianRational) -> Result<Self, Self::Error> {
if x.imaginary == 0u32 {
Ok(x.real.clone())
} else {
Err(RationalFromGaussianRationalError)
}
}
}
impl ConvertibleFrom<&GaussianRational> for Rational {
#[inline]
fn convertible_from(x: &GaussianRational) -> bool {
x.imaginary == 0u32
}
}