nvim_oxi_types/
non_owning.rs1use std::marker::PhantomData;
2use std::mem::ManuallyDrop;
3
4#[repr(transparent)]
9pub struct NonOwning<'a, T> {
10 inner: ManuallyDrop<T>,
11 lt: PhantomData<&'a ()>,
12}
13
14impl<T> NonOwning<'_, T> {
15 pub const fn new(value: T) -> Self {
16 Self { inner: ManuallyDrop::new(value), lt: PhantomData }
17 }
18}
19
20impl<T> core::fmt::Debug for NonOwning<'_, T>
21where
22 T: core::fmt::Debug,
23{
24 #[inline]
25 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
26 self.inner.fmt(f)
27 }
28}
29
30impl<T> Default for NonOwning<'_, T>
31where
32 T: Default,
33{
34 #[inline]
35 fn default() -> Self {
36 Self { inner: ManuallyDrop::new(T::default()), lt: PhantomData }
37 }
38}