num_format/
write_formatted.rs
1#![cfg(feature = "std")]
2
3use std::fmt;
4use std::io;
5
6use crate::{Format, ToFormattedString};
7
8pub trait WriteFormatted {
16 fn write_formatted<F, N>(&mut self, n: &N, format: &F) -> Result<usize, io::Error>
30 where
31 F: Format,
32 N: ToFormattedString;
33}
34
35macro_rules! impl_for_fmt_write {
36 () => {
37 #[inline(always)]
38 fn write_formatted<F, N>(&mut self, n: &N, format: &F) -> Result<usize, io::Error>
39 where
40 F: Format,
41 N: ToFormattedString,
42 {
43 n.read_to_fmt_writer(self, format)
44 .map_err(|e| io::Error::new(io::ErrorKind::Other, e))
45 }
46 };
47}
48
49macro_rules! impl_for_io_write {
50 () => {
51 #[inline(always)]
52 fn write_formatted<F, N>(&mut self, n: &N, format: &F) -> Result<usize, io::Error>
53 where
54 F: Format,
55 N: ToFormattedString,
56 {
57 n.read_to_io_writer(self, format)
58 }
59 };
60}
61
62#[rustfmt::skip]
63mod any {
64 use std::fs;
65 use std::net;
66 use std::process;
67
68 use super::*;
69
70 impl<W: io::Write + ?Sized> WriteFormatted for Box<W> { impl_for_io_write!(); }
71 impl<W: io::Write> WriteFormatted for io::BufWriter<W> { impl_for_io_write!(); }
72 impl WriteFormatted for process::ChildStdin { impl_for_io_write!(); }
73 impl WriteFormatted for io::Cursor<Box<[u8]>> { impl_for_io_write!(); }
74 impl WriteFormatted for io::Cursor<Vec<u8>> { impl_for_io_write!(); }
75 impl<'a> WriteFormatted for io::Cursor<&'a mut [u8]> { impl_for_io_write!(); }
76 impl<'a> WriteFormatted for io::Cursor<&'a mut Vec<u8>> { impl_for_io_write!(); }
77 impl WriteFormatted for fs::File { impl_for_io_write!(); }
78 impl<W: io::Write> WriteFormatted for io::LineWriter<W> { impl_for_io_write!(); }
79 impl WriteFormatted for io::Sink { impl_for_io_write!(); }
80 impl WriteFormatted for io::Stderr { impl_for_io_write!(); }
81 impl WriteFormatted for io::Stdout { impl_for_io_write!(); }
82 impl WriteFormatted for String { impl_for_fmt_write!(); }
83 impl WriteFormatted for net::TcpStream { impl_for_io_write!(); }
84 impl WriteFormatted for Vec<u8> { impl_for_io_write!(); }
85 impl<'a> WriteFormatted for io::StderrLock<'a> { impl_for_io_write!(); }
86 impl<'a> WriteFormatted for io::StdoutLock<'a> { impl_for_io_write!(); }
87
88 impl<'a> WriteFormatted for &'a mut [u8] { impl_for_io_write!(); }
89 impl<'a, W: io::Write + ?Sized> WriteFormatted for &'a mut Box<W> { impl_for_io_write!(); }
90 impl<'a, W: io::Write> WriteFormatted for &'a mut io::BufWriter<W> { impl_for_io_write!(); }
91 impl<'a> WriteFormatted for &'a mut process::ChildStdin { impl_for_io_write!(); }
92 impl<'a> WriteFormatted for &'a mut io::Cursor<Box<[u8]>> { impl_for_io_write!(); }
93 impl<'a> WriteFormatted for &'a mut io::Cursor<Vec<u8>> { impl_for_io_write!(); }
94 impl<'a, 'b> WriteFormatted for &'a mut io::Cursor<&'b mut [u8]> { impl_for_io_write!(); }
95 impl<'a, 'b> WriteFormatted for &'a mut io::Cursor<&'b mut Vec<u8>> { impl_for_io_write!(); }
96 impl<'a> WriteFormatted for &'a fs::File { impl_for_io_write!(); }
97 impl<'a> WriteFormatted for &'a mut fs::File { impl_for_io_write!(); }
98 impl<'a, 'b> WriteFormatted for &'a mut fmt::Formatter<'b> { impl_for_fmt_write!(); }
99 impl<'a, W: io::Write> WriteFormatted for &'a mut io::LineWriter<W> { impl_for_io_write!(); }
100 impl<'a> WriteFormatted for &'a mut io::Sink { impl_for_io_write!(); }
101 impl<'a> WriteFormatted for &'a mut io::Stderr { impl_for_io_write!(); }
102 impl<'a> WriteFormatted for &'a mut io::Stdout { impl_for_io_write!(); }
103 impl<'a> WriteFormatted for &'a mut String { impl_for_fmt_write!(); }
104 impl<'a> WriteFormatted for &'a net::TcpStream { impl_for_io_write!(); }
105 impl<'a> WriteFormatted for &'a mut net::TcpStream { impl_for_io_write!(); }
106 impl<'a> WriteFormatted for &'a mut Vec<u8> { impl_for_io_write!(); }
107 impl<'a, 'b> WriteFormatted for &'a mut io::StderrLock<'b> { impl_for_io_write!(); }
108 impl<'a, 'b> WriteFormatted for &'a mut io::StdoutLock<'b> { impl_for_io_write!(); }
109}
110
111#[cfg(unix)]
112#[rustfmt::skip]
113mod unix {
114 use std::os::unix::net::UnixStream;
115
116 use super::*;
117
118 impl WriteFormatted for UnixStream { impl_for_io_write!(); }
119 impl<'a> WriteFormatted for &'a UnixStream { impl_for_io_write!(); }
120 impl<'a> WriteFormatted for &'a mut UnixStream { impl_for_io_write!(); }
121}