tracing_fluentd/
default_writers.rs1use crate::MakeWriter;
2
3use std::net::ToSocketAddrs;
4
5impl MakeWriter for std::vec::IntoIter<std::net::SocketAddr> {
6 type Writer = std::net::TcpStream;
7
8 #[inline(always)]
9 fn make(&self) -> std::io::Result<Self::Writer> {
10 for addr in self.as_slice().iter() {
11 match std::net::TcpStream::connect_timeout(addr, core::time::Duration::from_secs(1)) {
12 Ok(socket) => return Ok(socket),
13 Err(_) => continue,
14 }
15 }
16
17 Err(std::io::Error::new(std::io::ErrorKind::NotFound, "cannot connect to fluentd"))
18 }
19}
20
21impl MakeWriter for &'static str {
23 type Writer = std::net::TcpStream;
24
25 #[inline(always)]
26 fn make(&self) -> std::io::Result<Self::Writer> {
27 let addrs = self.to_socket_addrs()?;
28
29 for addr in addrs.as_slice().iter() {
30 match std::net::TcpStream::connect_timeout(addr, core::time::Duration::from_secs(1)) {
31 Ok(socket) => return Ok(socket),
32 Err(_) => continue,
33 }
34 }
35
36 Err(std::io::Error::new(std::io::ErrorKind::NotFound, "cannot connect to fluentd"))
37 }
38}
39
40impl MakeWriter for (&'static str, u16) {
42 type Writer = std::net::TcpStream;
43
44 #[inline(always)]
45 fn make(&self) -> std::io::Result<Self::Writer> {
46 let addrs = self.to_socket_addrs()?;
47
48 for addr in addrs.as_slice().iter() {
49 match std::net::TcpStream::connect_timeout(addr, core::time::Duration::from_secs(1)) {
50 Ok(socket) => return Ok(socket),
51 Err(_) => continue,
52 }
53 }
54
55 Err(std::io::Error::new(std::io::ErrorKind::NotFound, "cannot connect to fluentd"))
56 }
57}
58
59impl MakeWriter for std::net::SocketAddr {
60 type Writer = std::net::TcpStream;
61
62 #[inline(always)]
63 fn make(&self) -> std::io::Result<Self::Writer> {
64 match std::net::TcpStream::connect_timeout(self, core::time::Duration::from_secs(1)) {
65 Ok(socket) => Ok(socket),
66 Err(_) => Err(std::io::Error::new(std::io::ErrorKind::NotFound, "cannot connect to fluentd")),
67 }
68 }
69}
70
71impl MakeWriter for [std::net::SocketAddr; 1] {
72 type Writer = std::net::TcpStream;
73
74 #[inline(always)]
75 fn make(&self) -> std::io::Result<Self::Writer> {
76 match std::net::TcpStream::connect_timeout(&self[0], core::time::Duration::from_secs(1)) {
77 Ok(socket) => Ok(socket),
78 Err(_) => Err(std::io::Error::new(std::io::ErrorKind::NotFound, "cannot connect to fluentd")),
79 }
80 }
81}
82
83macro_rules! impl_for_socket_addr_array {
85 ($($idx:literal),+) => {
86
87 $(
88 impl MakeWriter for [std::net::SocketAddr; $idx] {
89 type Writer = std::net::TcpStream;
90
91 #[inline(always)]
92 fn make(&self) -> std::io::Result<Self::Writer> {
93 for addr in self {
94 match std::net::TcpStream::connect_timeout(addr, core::time::Duration::from_secs(1)) {
95 Ok(socket) => return Ok(socket),
96 Err(_) => continue,
97 }
98 }
99
100 Err(std::io::Error::new(std::io::ErrorKind::NotFound, "cannot connect to fluentd"))
101 }
102 }
103 )+
104 }
105}
106
107impl_for_socket_addr_array!(2,3,4,5,6,7,8,9,10,11,12);