use crate::result::*;
use crate::*;
use std::ops::{Deref, DerefMut};
pub struct IonDecimalPtr {
value: ION_DECIMAL,
}
impl IonDecimalPtr {
pub fn try_from_i32(value: i32) -> IonCResult<Self> {
let mut decimal = Self::try_from_existing(ION_DECIMAL::default())?;
ionc!(ion_decimal_from_int32(decimal.as_mut_ptr(), value))?;
Ok(decimal)
}
pub fn try_from_bigdecimal(value: &BigDecimal) -> IonCResult<Self> {
let mut decimal = Self::try_from_existing(ION_DECIMAL::default())?;
decimal.try_assign_bigdecimal(value)?;
Ok(decimal)
}
pub fn try_from_decquad(value: decQuad) -> IonCResult<Self> {
let ion_decimal = ION_DECIMAL {
type_: ION_DECIMAL_TYPE_ION_DECIMAL_TYPE_QUAD,
value: _ion_decimal__bindgen_ty_1 { quad_value: value },
};
Self::try_from_existing(ion_decimal)
}
pub fn try_from_existing(value: ION_DECIMAL) -> IonCResult<Self> {
Ok(Self { value })
}
pub fn as_mut_ptr(&mut self) -> *mut ION_DECIMAL {
&mut self.value
}
}
impl Deref for IonDecimalPtr {
type Target = ION_DECIMAL;
fn deref(&self) -> &Self::Target {
&self.value
}
}
impl DerefMut for IonDecimalPtr {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.value
}
}
impl Drop for IonDecimalPtr {
fn drop(&mut self) {
unsafe {
ion_decimal_free(&mut self.value);
}
}
}