dope 0.12.0

The manifold runtime
Documentation
use std::marker::PhantomData;
use std::os::fd::{AsRawFd, OwnedFd, RawFd};
use std::rc::Rc;

#[derive(Clone, Debug)]
#[repr(transparent)]
pub struct Source<'d> {
    fd: Rc<OwnedFd>,
    brand: PhantomData<fn(&'d ()) -> &'d ()>,
}

impl<'d> Source<'d> {
    #[doc(hidden)]
    pub fn owned(fd: OwnedFd) -> Self {
        Self {
            fd: Rc::new(fd),
            brand: PhantomData,
        }
    }
}

impl AsRawFd for Source<'_> {
    fn as_raw_fd(&self) -> RawFd {
        self.fd.as_raw_fd()
    }
}