conch_runtime_pshaw/io/
file_desc_wrapper.rs

1use crate::io::FileDesc;
2use std::io;
3use std::rc::Rc;
4use std::sync::Arc;
5
6/// An interface for any wrapper which can be unwrapped into a `FileDesc`.
7pub trait FileDescWrapper: Sized {
8    /// Unwrap to an owned `FileDesc` handle.
9    fn try_unwrap(self) -> io::Result<FileDesc>;
10}
11
12impl FileDescWrapper for FileDesc {
13    fn try_unwrap(self) -> io::Result<FileDesc> {
14        Ok(self)
15    }
16}
17
18impl FileDescWrapper for Box<FileDesc> {
19    fn try_unwrap(self) -> io::Result<FileDesc> {
20        Ok(*self)
21    }
22}
23
24impl FileDescWrapper for Rc<FileDesc> {
25    fn try_unwrap(self) -> io::Result<FileDesc> {
26        Rc::try_unwrap(self).or_else(|rc| rc.duplicate())
27    }
28}
29
30impl FileDescWrapper for Arc<FileDesc> {
31    fn try_unwrap(self) -> io::Result<FileDesc> {
32        Arc::try_unwrap(self).or_else(|arc| arc.duplicate())
33    }
34}