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;
fn neg(self) -> Self::Output {
self.checked_unary_minus().unwrap()
}
}