summaryrefslogtreecommitdiff
path: root/src/server/address.rs
blob: 3d8e59fbff9a53293c9c9fea94bf2519366fb761 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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"))
	}
}