use crate::{Deref, DerefMut, Num, NumResult as Result};
#[doc = crate::_tags!(num lifetime)]
#[doc = crate::_doc_location!("num/dom")]
#[rustfmt::skip]
pub trait NumRef<'a> where Self: Deref<Target = Self::Own> {
type Own: Num;
fn num_to_owned(&self) -> Result<Self::Own> where Self::Own: Clone { Ok((*self).clone()) }
fn num_set(&mut self, value: <Self::Own as Num>::Inner) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_set(value) }
fn num_set_ref(&mut self, value: &<Self::Own as Num>::Inner) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_set_ref(value) }
fn num_is_zero(&self) -> Result<bool> { self.deref().num_is_zero() }
fn num_get_zero() -> Result<Self::Own> { Self::Own::num_get_zero() }
fn num_set_zero(&mut self) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_set_zero() }
fn num_is_one(&self) -> Result<bool> { self.deref().num_is_one() }
fn num_get_one() -> Result<Self::Own> { Self::Own::num_get_one() }
fn num_set_one(&mut self) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_set_one() }
fn num_ref_add(&self, rhs: &<Self::Own as Num>::Rhs) -> Result<<Self::Own as Num>::Out> {
self.deref().num_ref_add(rhs) }
fn num_ref_add_assign(&mut self, rhs: &<Self::Own as Num>::Rhs) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_ref_add_assign(rhs) }
fn num_ref_sub(&self, rhs: &<Self::Own as Num>::Rhs) -> Result<<Self::Own as Num>::Out> {
self.deref().num_ref_sub(rhs) }
fn num_ref_sub_assign(&mut self, rhs: &<Self::Own as Num>::Rhs) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_ref_sub_assign(rhs) }
fn num_ref_mul(&self, rhs: &<Self::Own as Num>::Rhs) -> Result<<Self::Own as Num>::Out> {
self.deref().num_ref_mul(rhs) }
fn num_ref_mul_assign(&mut self, rhs: &<Self::Own as Num>::Rhs) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_ref_mul_assign(rhs) }
fn num_ref_div(&self, rhs: &<Self::Own as Num>::Rhs) -> Result<<Self::Own as Num>::Out> {
self.deref().num_ref_div(rhs) }
fn num_ref_div_assign(&mut self, rhs: &<Self::Own as Num>::Rhs) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_ref_div_assign(rhs) }
fn num_ref_rem(&self, rhs: &<Self::Own as Num>::Rhs) -> Result<<Self::Own as Num>::Out> {
self.deref().num_ref_rem(rhs) }
fn num_ref_rem_assign(&mut self, rhs: &<Self::Own as Num>::Rhs) -> Result<()>
where Self: DerefMut<Target = Self::Own> { self.deref_mut().num_ref_rem_assign(rhs) }
fn num_ref_neg(&self) -> Result<<Self::Own as Num>::Out> { self.deref().num_ref_neg() }
fn num_ref_abs(&self) -> Result<<Self::Own as Num>::Out> { self.deref().num_ref_abs() }
}