use std::{io, os::fd::{AsRawFd, OwnedFd}}; #[cfg(target_os = "yggdrasil")] pub mod yggdrasil; #[cfg(target_os = "yggdrasil")] pub use yggdrasil::*; #[cfg(any(unix, rust_analyzer))] pub mod unix; #[cfg(unix)] pub use unix::*; pub enum Either { Left(T), Right(U) } pub trait IpcSender: AsRawFd { fn send_message_to(&self, message: &[u8], peer: &PeerAddr) -> Result<(), io::Error>; fn send_file_to(&self, file: &F, peer: &PeerAddr) -> Result<(), io::Error>; fn host_addr(&self) -> &PeerAddr; } pub trait IpcReceiver: AsRawFd { fn receive(&self, buffer: &mut [u8]) -> Result<(PeerAddr, Either), io::Error>; } impl Either { pub fn try_map_left Result>(self, map: F) -> Result, E> { match self { Self::Left(val) => map(val).map(Either::Left), Self::Right(val) => Ok(Either::Right(val)) } } }