use std::fmt;
use std::io;
use crate::SDElement;
use crate::Severity;
#[cfg(unix)]
mod unix_impl;
#[cfg(unix)]
pub use unix_impl::*;
#[cfg(feature = "native-tls")]
mod native_tls_impl;
#[cfg(feature = "native-tls")]
pub use native_tls_impl::*;
#[cfg(feature = "rustls")]
mod rustls_impl;
#[cfg(feature = "rustls")]
pub use rustls_impl::*;
mod tcp_impl;
pub use tcp_impl::*;
mod udp_impl;
pub use udp_impl::*;
pub(crate) mod internal;
#[derive(Debug)]
pub enum SyslogSender {
Tcp(TcpSender),
Udp(UdpSender),
#[cfg(feature = "native-tls")]
NativeTlsSender(NativeTlsSender),
#[cfg(feature = "rustls")]
RustlsSender(Box<RustlsSender>),
#[cfg(unix)]
UnixDatagram(UnixDatagramSender),
#[cfg(unix)]
UnixStream(UnixStreamSender),
}
impl SyslogSender {
pub fn send_rfc3164<M: fmt::Display>(
&mut self,
severity: Severity,
message: M,
) -> io::Result<()> {
match self {
SyslogSender::Tcp(sender) => sender.send_rfc3164(severity, message),
SyslogSender::Udp(sender) => sender.send_rfc3164(severity, message),
#[cfg(feature = "native-tls")]
SyslogSender::NativeTlsSender(sender) => sender.send_rfc3164(severity, message),
#[cfg(feature = "rustls")]
SyslogSender::RustlsSender(sender) => sender.send_rfc3164(severity, message),
#[cfg(unix)]
SyslogSender::UnixDatagram(sender) => sender.send_rfc3164(severity, message),
#[cfg(unix)]
SyslogSender::UnixStream(sender) => sender.send_rfc3164(severity, message),
}
}
pub fn send_rfc5424<S: Into<String>, M: fmt::Display>(
&mut self,
severity: Severity,
msgid: Option<S>,
elements: Vec<SDElement>,
message: M,
) -> io::Result<()> {
match self {
SyslogSender::Tcp(sender) => sender.send_rfc5424(severity, msgid, elements, message),
SyslogSender::Udp(sender) => sender.send_rfc5424(severity, msgid, elements, message),
#[cfg(feature = "native-tls")]
SyslogSender::NativeTlsSender(sender) => {
sender.send_rfc5424(severity, msgid, elements, message)
}
#[cfg(feature = "rustls")]
SyslogSender::RustlsSender(sender) => {
sender.send_rfc5424(severity, msgid, elements, message)
}
#[cfg(unix)]
SyslogSender::UnixDatagram(sender) => {
sender.send_rfc5424(severity, msgid, elements, message)
}
#[cfg(unix)]
SyslogSender::UnixStream(sender) => {
sender.send_rfc5424(severity, msgid, elements, message)
}
}
}
pub fn send_formatted(&mut self, formatted: &[u8]) -> io::Result<()> {
match self {
SyslogSender::Tcp(sender) => sender.send_formatted(formatted),
SyslogSender::Udp(sender) => sender.send_formatted(formatted),
#[cfg(feature = "native-tls")]
SyslogSender::NativeTlsSender(sender) => sender.send_formatted(formatted),
#[cfg(feature = "rustls")]
SyslogSender::RustlsSender(sender) => sender.send_formatted(formatted),
#[cfg(unix)]
SyslogSender::UnixDatagram(sender) => sender.send_formatted(formatted),
#[cfg(unix)]
SyslogSender::UnixStream(sender) => sender.send_formatted(formatted),
}
}
pub fn flush(&mut self) -> io::Result<()> {
match self {
SyslogSender::Tcp(sender) => sender.flush(),
SyslogSender::Udp(_) => Ok(()),
#[cfg(feature = "native-tls")]
SyslogSender::NativeTlsSender(sender) => sender.flush(),
#[cfg(feature = "rustls")]
SyslogSender::RustlsSender(sender) => sender.flush(),
#[cfg(unix)]
SyslogSender::UnixDatagram(_) => Ok(()),
#[cfg(unix)]
SyslogSender::UnixStream(sender) => sender.flush(),
}
}
}