1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
use crate::api::networking::tcp::{TcpListener, TcpStream}; use crate::api::process::Process; use std::convert::TryFrom; use super::{ChannelReceiver, ChannelSender}; pub enum Resource { Empty, Process(Process), ChannelSender(ChannelSender), ChannelReceiver(ChannelReceiver), TcpListener(TcpListener), TcpStream(TcpStream), } impl From<Process> for Resource { fn from(process: Process) -> Self { Resource::Process(process) } } impl TryFrom<Resource> for Process { type Error = (); fn try_from(resource: Resource) -> Result<Process, ()> { match resource { Resource::Process(process) => Ok(process), _ => Err(()), } } } impl From<ChannelSender> for Resource { fn from(sender: ChannelSender) -> Self { Resource::ChannelSender(sender) } } impl TryFrom<Resource> for ChannelSender { type Error = (); fn try_from(resource: Resource) -> Result<ChannelSender, ()> { match resource { Resource::ChannelSender(sender) => Ok(sender), _ => Err(()), } } } impl From<ChannelReceiver> for Resource { fn from(receiver: ChannelReceiver) -> Self { Resource::ChannelReceiver(receiver) } } impl TryFrom<Resource> for ChannelReceiver { type Error = (); fn try_from(resource: Resource) -> Result<ChannelReceiver, ()> { match resource { Resource::ChannelReceiver(receiver) => Ok(receiver), _ => Err(()), } } } impl From<TcpListener> for Resource { fn from(tcp_listener: TcpListener) -> Self { Resource::TcpListener(tcp_listener) } } impl TryFrom<Resource> for TcpListener { type Error = (); fn try_from(resource: Resource) -> Result<TcpListener, ()> { match resource { Resource::TcpListener(tcp_listener) => Ok(tcp_listener), _ => Err(()), } } } impl From<TcpStream> for Resource { fn from(tcp_stream: TcpStream) -> Self { Resource::TcpStream(tcp_stream) } } impl TryFrom<Resource> for TcpStream { type Error = (); fn try_from(resource: Resource) -> Result<TcpStream, ()> { match resource { Resource::TcpStream(tcp_stream) => Ok(tcp_stream), _ => Err(()), } } }