apple-quant-algorithmic 0.4.0

Apple Quant's algorithmic library.
Documentation
use crate::volume::{ZeroableExt, ZeroableVolume};

#[allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ZeroableUnchecked<T: ZeroableVolume>(T);

#[allow(dead_code)]
impl<T: ZeroableVolume> ZeroableUnchecked<T> {
	pub const ZERO: Self = Self(T::ZERO);

	pub fn new(
		t: T,
	) -> Self {
		Self(t)
	}
}

impl<T: ZeroableVolume> ZeroableExt<T> for ZeroableUnchecked<T> {
	fn as_optional_nonzero_ref(
		&self,
	) -> Option<&T> {
		if self.0.is_zero() {
			None
		} else {
			Some(&self.0)
		}
	}

	fn as_optional_nonzero_mut(
		&mut self,
	) -> Option<&mut T> {
		if self.0.is_zero() {
			None
		} else {
			Some(&mut self.0)
		}
	}

	fn into_optional_nonzero(
		self,
	) -> Option<T> {
		if self.0.is_zero() {
			None
		} else {
			Some(self.0)
		}
	}

	fn as_zeroable(
		&self,
	) -> T {
		self.0
	}

	fn into_zeroable(
		self,
	) -> T {
		self.0
	}

	fn as_nonzero_unchecked_ref(
		&self,
	) -> &T {
		&self.0
	}

	fn as_nonzero_unchecked_mut(
		&mut self,
	) -> &mut T {
		&mut self.0
	}

	fn into_nonzero_unchecked(
		self,
	) -> T {
		self.0
	}
}