1use 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}