apple-quant-algorithmic 0.4.0

Apple Quant's algorithmic library.
Documentation
macro_rules! impl_volume_binop {
	($self:ident, $release_unchecked:ident, $checked:ident, $checked_fn:ident,
	 $unchecked:ident, $unchecked_fn:ident,
	 $checked_op:expr, $unchecked_op:expr, $error:ty,
	 $gen_param_name:tt, $gen_param_type:tt) => {
		// RELEASE UNCHECKED

		impl<$gen_param_name: $gen_param_type>
			$release_unchecked<
				$self<$gen_param_name>,
				$self<$gen_param_name>,
				Result<$self<$gen_param_name>, $error>,
			> for $self<$gen_param_name>
		{
		}

		impl<$gen_param_name: $gen_param_type>
			$release_unchecked<
				$self<$gen_param_name>,
				$self<$gen_param_name>,
				Result<$self<$gen_param_name>, $error>,
			> for &$self<$gen_param_name>
		{
		}

		// CHECKED

		impl<$gen_param_name: $gen_param_type>
			$checked<$self<$gen_param_name>, Result<$self<$gen_param_name>, $error>>
			for $self<$gen_param_name>
		{
			fn $checked_fn(
				self,
				rhs: impl Borrow<$self<$gen_param_name>>,
			) -> Result<$self<$gen_param_name>, $error> {
				let rhs = *rhs.borrow();
				$checked_op(self, rhs)
			}
		}

		impl<$gen_param_name: $gen_param_type>
			$checked<$self<$gen_param_name>, Result<$self<$gen_param_name>, $error>>
			for &$self<$gen_param_name>
		{
			fn $checked_fn(
				self,
				rhs: impl Borrow<$self<$gen_param_name>>,
			) -> Result<$self<$gen_param_name>, $error> {
				(*self).$checked_fn(rhs)
			}
		}

		// UNCHECKED

		impl<$gen_param_name: $gen_param_type>
			$unchecked<$self<$gen_param_name>, $self<$gen_param_name>> for $self<$gen_param_name>
		{
			fn $unchecked_fn(
				self,
				rhs: impl Borrow<$self<$gen_param_name>>,
			) -> $self<$gen_param_name> {
				let rhs = *rhs.borrow();
				$unchecked_op(self, rhs)
			}
		}

		impl<$gen_param_name: $gen_param_type>
			$unchecked<$self<$gen_param_name>, $self<$gen_param_name>> for &$self<$gen_param_name>
		{
			fn $unchecked_fn(
				self,
				rhs: impl Borrow<$self<$gen_param_name>>,
			) -> $self<$gen_param_name> {
				(*self).$unchecked_fn(rhs)
			}
		}
	};
}