use crate::rational_polynomial::RationalPolynomial;
use malachite_base::num::basic::unsigneds::PrimitiveUnsigned;
use malachite_base::num::conversion::traits::ConvertibleFrom;
use malachite_base::unsigned_polynomial::UnsignedPolynomial;
use malachite_nz::integer::Integer;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct UnsignedPolynomialFromRationalPolynomialError;
impl<T: PrimitiveUnsigned + for<'a> TryFrom<&'a Integer>> TryFrom<&RationalPolynomial>
for UnsignedPolynomial<T>
{
type Error = UnsignedPolynomialFromRationalPolynomialError;
fn try_from(p: &RationalPolynomial) -> Result<Self, Self::Error> {
if p.denominator == 1u32 {
Self::try_from(&p.numerator).map_err(|_| UnsignedPolynomialFromRationalPolynomialError)
} else {
Err(UnsignedPolynomialFromRationalPolynomialError)
}
}
}
impl<T: PrimitiveUnsigned + for<'a> TryFrom<&'a Integer>> TryFrom<RationalPolynomial>
for UnsignedPolynomial<T>
{
type Error = UnsignedPolynomialFromRationalPolynomialError;
#[inline]
fn try_from(p: RationalPolynomial) -> Result<Self, Self::Error> {
Self::try_from(&p)
}
}
impl<T: PrimitiveUnsigned + for<'a> ConvertibleFrom<&'a Integer>>
ConvertibleFrom<&RationalPolynomial> for UnsignedPolynomial<T>
{
#[inline]
fn convertible_from(p: &RationalPolynomial) -> bool {
p.denominator == 1u32 && Self::convertible_from(&p.numerator)
}
}