cluExtIO/write/ext_write/
mod.rs1
2use ::std::io::Write;
3
4
5mod std;
6pub use self::std::*;
7
8pub trait ExtWrite<'a>: Write {
10 type LockWrite: Write + 'a;
11
12 fn lock(&'a self) -> Self::LockWrite;
14
15 #[inline(always)]
17 fn lock_fn<F: FnMut(Self::LockWrite) -> R, R>(&'a self, mut f: F) -> R {
18 f(self.lock())
19 }
20}
21
22
23impl<'a, 'l, L: ExtWrite<'a, LockWrite = W>, W: 'a + Write> ExtWrite<'a> for &'l L where Self: Write {
25 type LockWrite = W;
26
27
28 #[inline(always)]
30 fn lock(&'a self) -> Self::LockWrite {
31 L::lock(self)
32 }
33
34 #[inline(always)]
36 fn lock_fn<F: FnMut(Self::LockWrite) -> R, R>(&'a self, f: F) -> R {
37 L::lock_fn(self, f)
38 }
39}
40
41impl<'a, 'l, L: ExtWrite<'a, LockWrite = W> + Write, W: 'a + Write> ExtWrite<'a> for &'l mut L where Self: Write {
43 type LockWrite = W;
44
45 #[inline(always)]
47 fn lock(&'a self) -> Self::LockWrite {
48 L::lock(self)
49 }
50
51 #[inline(always)]
53 fn lock_fn<F: FnMut(Self::LockWrite) -> R, R>(&'a self, f: F) -> R {
54 L::lock_fn(self, f)
55 }
56}