rsdiff_graphs/grad/
id.rs

1/*
2    Appellation: id <module>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5use crate::Id;
6use core::marker::PhantomData;
7use core::ops::Deref;
8
9#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
10#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
11pub struct GradientId<T> {
12    pub(crate) inner: Id,
13    ptr: PhantomData<T>,
14}
15
16impl<T> GradientId<T> {
17    pub fn new(inner: Id) -> Self {
18        Self {
19            inner,
20            ptr: PhantomData,
21        }
22    }
23
24    pub fn into_inner(self) -> Id {
25        self.inner
26    }
27}
28
29impl<T> core::fmt::Display for GradientId<T> {
30    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
31        write!(f, "{:?}", self.inner)
32    }
33}
34
35impl<T> Deref for GradientId<T> {
36    type Target = Id;
37
38    fn deref(&self) -> &Self::Target {
39        &self.inner
40    }
41}
42
43impl<T> From<Id> for GradientId<T> {
44    fn from(id: Id) -> Self {
45        Self::new(id)
46    }
47}