mpdec 4.0.1

wrapper for libmpdec math library
Documentation
use crate::{Decimal, context::get_context, error::MPDecimalError};

impl Decimal {
    pub fn checked_unary_plus(self) -> Result<Decimal, MPDecimalError> {
        let result = Decimal::checked_new()?;

        let mut status = 0_u32;

        unsafe {
            mpdec_sys::mpd_qplus(result.inner, self.inner, &mut *get_context(), &mut status);
        }

        MPDecimalError::from_status(status)?;

        Ok(result)
    }
    pub fn checked_unary_minus(self) -> Result<Decimal, MPDecimalError> {
        let result = Decimal::checked_new()?;

        let mut status = 0_u32;

        unsafe {
            mpdec_sys::mpd_qminus(result.inner, self.inner, &mut *get_context(), &mut status);
        }

        MPDecimalError::from_status(status)?;

        Ok(result)
    }
    pub fn checked_abs(&self) -> Result<Decimal, MPDecimalError> {
        let result = Decimal::checked_new()?;

        let mut status = 0_u32;

        unsafe {
            mpdec_sys::mpd_qabs(result.inner, self.inner, &mut *get_context(), &mut status);
        }

        MPDecimalError::from_status(status)?;

        Ok(result)
    }
}

impl std::ops::Neg for Decimal {
    type Output = Decimal;
    /// Panics: \
    /// May panic on any error. \
    /// Use [`Decimal::checked_unary_minus()`] to process error.
    fn neg(self) -> Self::Output {
        self.checked_unary_minus().unwrap()
    }
}