use crate::utils::IntoCHandle;
use std::fmt;
use std::num::NonZeroU32;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Handle(pub(crate) NonZeroU32);
impl Handle {
pub(crate) fn new(n: u32) -> Option<Self> {
NonZeroU32::new(n).map(Self)
}
}
impl From<Handle> for u32 {
fn from(value: Handle) -> Self {
value.0.into()
}
}
impl fmt::Display for Handle {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.0.fmt(f)
}
}
impl IntoCHandle for Option<Handle> {
fn into_handle(self) -> u32 {
match self {
Some(i) => i.into(),
None => 0,
}
}
}