summaryrefslogtreecommitdiff
path: root/src/server/address.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/address.rs')
-rw-r--r--src/server/address.rs19
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"))
+ }
+}