const Deref and const Neg impl
This commit is contained in:
parent
7fb0b6cda3
commit
93f8051626
@ -22,3 +22,4 @@ default = ["std"]
|
|||||||
defmt = ["dep:defmt"]
|
defmt = ["dep:defmt"]
|
||||||
fixed = ["dep:fixed"]
|
fixed = ["dep:fixed"]
|
||||||
std = ["num-traits/std"]
|
std = ["num-traits/std"]
|
||||||
|
nightly = []
|
||||||
|
44
src/lib.rs
44
src/lib.rs
@ -1,7 +1,11 @@
|
|||||||
#![cfg_attr(not(feature = "std"), no_std)]
|
#![cfg_attr(not(feature = "std"), no_std)]
|
||||||
|
#![cfg_attr(feature = "nightly", feature(const_trait_impl))]
|
||||||
|
#![cfg_attr(feature = "nightly", feature(trait_alias))]
|
||||||
mod display;
|
mod display;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
use core::marker::Destruct;
|
||||||
use core::{
|
use core::{
|
||||||
marker::PhantomData,
|
marker::PhantomData,
|
||||||
ops::{
|
ops::{
|
||||||
@ -37,6 +41,7 @@ where
|
|||||||
_cd: PhantomData<Candela>,
|
_cd: PhantomData<Candela>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "nightly"))]
|
||||||
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> Deref
|
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> Deref
|
||||||
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
||||||
where
|
where
|
||||||
@ -54,6 +59,24 @@ where
|
|||||||
&self.value
|
&self.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> const Deref
|
||||||
|
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
||||||
|
where
|
||||||
|
Second: Integer,
|
||||||
|
Metre: Integer,
|
||||||
|
Kilogram: Integer,
|
||||||
|
Ampere: Integer,
|
||||||
|
Kelvin: Integer,
|
||||||
|
Mole: Integer,
|
||||||
|
Candela: Integer,
|
||||||
|
{
|
||||||
|
type Target = T;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> DerefMut
|
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> DerefMut
|
||||||
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
||||||
@ -71,6 +94,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "nightly"))]
|
||||||
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> Neg
|
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> Neg
|
||||||
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
||||||
where
|
where
|
||||||
@ -89,6 +113,26 @@ where
|
|||||||
Self::Output::new(-self.value)
|
Self::Output::new(-self.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> const Neg
|
||||||
|
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
||||||
|
where
|
||||||
|
Second: Integer,
|
||||||
|
Metre: Integer,
|
||||||
|
Kilogram: Integer,
|
||||||
|
Ampere: Integer,
|
||||||
|
Kelvin: Integer,
|
||||||
|
Mole: Integer,
|
||||||
|
Candela: Integer,
|
||||||
|
T: ~const Neg,
|
||||||
|
Self: ~const Destruct,
|
||||||
|
{
|
||||||
|
type Output = SiUnit<T::Output, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>;
|
||||||
|
|
||||||
|
fn neg(self) -> Self::Output {
|
||||||
|
Self::Output::new(-self.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> Zero
|
impl<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela> Zero
|
||||||
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
for SiUnit<T, Second, Metre, Kilogram, Ampere, Kelvin, Mole, Candela>
|
||||||
|
Loading…
Reference in New Issue
Block a user