use super::connection::Connection;
#[cfg(unix)]
use std::path::Path;
use std::{
io::Result as IoResult,
net::{TcpStream, ToSocketAddrs, UdpSocket},
};
#[allow(clippy::module_name_repetitions)]
pub struct SyslogConnection(Connection);
impl SyslogConnection {
#[cfg_attr(docsrs, doc(cfg(unix)))]
#[cfg(unix)]
pub fn try_datagram<P: AsRef<Path>>(path: P) -> IoResult<Self> {
let ud = std::os::unix::net::UnixDatagram::unbound()?;
ud.connect(&path)?;
Ok(SyslogConnection(Connection::Datagram(ud)))
}
#[cfg_attr(docsrs, doc(cfg(unix)))]
#[cfg(unix)]
pub fn try_stream<P: AsRef<Path>>(path: P) -> IoResult<Self> {
Ok(SyslogConnection(Connection::Stream(
std::os::unix::net::UnixStream::connect(path)?,
)))
}
#[cfg_attr(docsrs, doc(cfg(unix)))]
#[cfg(unix)]
#[must_use]
pub fn syslog_call() -> Self {
SyslogConnection(Connection::SyslogCall)
}
pub fn try_tcp<T: ToSocketAddrs>(server: T) -> IoResult<Self> {
Ok(SyslogConnection(Connection::Tcp(TcpStream::connect(
server,
)?)))
}
pub fn try_udp<T: ToSocketAddrs>(local: T, server: T) -> IoResult<Self> {
let socket = UdpSocket::bind(local)?;
socket.connect(server)?;
Ok(SyslogConnection(Connection::Udp(socket)))
}
pub(super) fn into_inner(self) -> Connection {
self.0
}
}