1use core::fmt::Debug;
2use core::marker::PhantomData;
3use core::ops::{Deref, DerefMut};
4
5mod alloc;
6
7#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
9#[repr(transparent)]
10pub struct Prefixed<P, D> {
11 data: D,
12 prefix: PhantomData<P>,
13}
14
15impl<P, D> Prefixed<P, D> {
16 pub fn into_data(self) -> D {
18 self.data
19 }
20}
21
22impl<P, D, T> AsRef<T> for Prefixed<P, D>
23where
24 T: ?Sized,
25 D: AsRef<T>,
26{
27 fn as_ref(&self) -> &T {
28 self.data.as_ref()
29 }
30}
31
32impl<P, D, T> AsMut<T> for Prefixed<P, D>
33where
34 T: ?Sized,
35 D: AsMut<T>,
36{
37 fn as_mut(&mut self) -> &mut T {
38 self.data.as_mut()
39 }
40}
41
42impl<P, D> Deref for Prefixed<P, D>
43where
44 D: Deref,
45{
46 type Target = D::Target;
47
48 fn deref(&self) -> &Self::Target {
49 &self.data
50 }
51}
52
53impl<P, D> DerefMut for Prefixed<P, D>
54where
55 D: DerefMut,
56{
57 fn deref_mut(&mut self) -> &mut Self::Target {
58 &mut self.data
59 }
60}
61
62impl<P, D> IntoIterator for Prefixed<P, D>
63where
64 D: IntoIterator,
65{
66 type Item = D::Item;
67 type IntoIter = D::IntoIter;
68
69 fn into_iter(self) -> Self::IntoIter {
70 self.data.into_iter()
71 }
72}