generic_ec/non_zero/
definition.rs1use core::ops::Deref;
2
3use zeroize::Zeroize;
4
5#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Zeroize, Debug)]
7#[cfg_attr(
8 feature = "serde",
9 derive(serde::Serialize, serde::Deserialize),
10 serde(bound(
11 serialize = "T: From<NonZero<T>> + Clone + serde::Serialize",
12 deserialize = "NonZero<T>: TryFrom<T>, <NonZero<T> as TryFrom<T>>::Error: core::fmt::Display, T: serde::Deserialize<'de>",
13 )),
14 serde(into = "T", try_from = "T")
15)]
16#[cfg_attr(feature = "udigest", derive(udigest::Digestable))]
17pub struct NonZero<T>(T);
18
19impl<T> NonZero<T> {
20 pub(crate) fn new_unchecked(v: T) -> Self {
25 Self(v)
26 }
27
28 pub fn into_inner(self) -> T {
30 self.0
31 }
32}
33
34impl<T> AsRef<T> for NonZero<T> {
35 fn as_ref(&self) -> &T {
36 &self.0
37 }
38}
39
40impl<T> Deref for NonZero<T> {
41 type Target = T;
42 fn deref(&self) -> &Self::Target {
43 &self.0
44 }
45}