diff options
| -rw-r--r-- | src/server/address.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/address.rs b/src/server/address.rs new file mode 100644 index 0000000..3d8e59f --- /dev/null +++ b/src/server/address.rs @@ -0,0 +1,19 @@ + +use std::net::SocketAddr; +use std::path::Path; +use crate::{ + Result, + aerr +}; +use super::tcpserver::TcpServer; +use super::unixserver::UnixServer; +use super::Server; + +pub fn server_from_address(typename: &str, text: &str) -> Result<Box<dyn Server>> { + match typename { + "inet" => Ok(Box::new(TcpServer::new(&text.parse()?)?)), + "unix" => Ok(Box::new(UnixServer::new(Path::new(text))?)), + "abstract" => Ok(Box::new(UnixServer::new(Path::new(&format!("\0{}", text)))?)), + _ => Err(aerr!("Invalid address type")) + } +} |
