use crate::io::FileDesc;
use std::io;
use std::rc::Rc;
use std::sync::Arc;
pub trait FileDescWrapper: Sized {
fn try_unwrap(self) -> io::Result<FileDesc>;
}
impl FileDescWrapper for FileDesc {
fn try_unwrap(self) -> io::Result<FileDesc> {
Ok(self)
}
}
impl FileDescWrapper for Box<FileDesc> {
fn try_unwrap(self) -> io::Result<FileDesc> {
Ok(*self)
}
}
impl FileDescWrapper for Rc<FileDesc> {
fn try_unwrap(self) -> io::Result<FileDesc> {
Rc::try_unwrap(self).or_else(|rc| rc.duplicate())
}
}
impl FileDescWrapper for Arc<FileDesc> {
fn try_unwrap(self) -> io::Result<FileDesc> {
Arc::try_unwrap(self).or_else(|arc| arc.duplicate())
}
}