clucolor/
writer.rs

1
2use std::fmt::Display;
3use std::marker::PhantomData;
4use std::fmt;
5use std::fmt::Arguments;
6use std::io::Write;
7use std::io;
8use cluColor;
9
10///Lightweight wrap for generalized color type.
11#[allow(non_camel_case_types)]
12#[derive(Debug, Clone, Eq, Hash, Ord, PartialEq, PartialOrd)]
13pub struct cluColorWriter<C: cluColor>(PhantomData<C>);
14
15impl<C: cluColor> cluColorWriter<C> {
16	#[inline]
17	pub fn new() -> Self {
18		cluColorWriter(PhantomData)
19	}
20	
21	#[inline(always)]
22	pub fn raw_color<'a>(&self) -> &'a str {
23		C::raw_color()
24	}
25	
26	#[inline(always)]
27	pub fn raw_color_b<'a>(&self) -> &'a [u8] {
28		C::raw_color_b()
29	}
30	
31	#[inline(always)]
32	pub fn name<'a>(&self) -> &'a str {
33		C::name()
34	}
35	
36	#[inline(always)]
37	pub fn write<'a, W: Write>(&self, w: W, buf: &'a [u8]) -> io::Result<()> {
38		C::write(w, buf)
39	}
40	
41	#[inline(always)]
42	pub fn write_str<'a, W: Write>(&self, w: W, str: &'a str) -> io::Result<()> {
43		C::write_str(w, str)
44	}
45	
46	#[inline(always)]
47	pub fn write_fmt<'a, W: Write>(&self, w: W, fmt: Arguments<'a>) -> io::Result<()> {
48		C::write_fmt(w, fmt)
49	}
50	
51	// add /n
52	
53	#[inline(always)]
54	pub fn writen<'a, W: Write>(&self, w: W, buf: &'a [u8]) -> io::Result<()> {
55		C::writen(w, buf)
56	}
57	
58	#[inline(always)]
59	pub fn writen_str<'a, W: Write>(&self, w: W, str: &'a str) -> io::Result<()> {
60		C::writen_str(w, str)
61	}
62	
63	#[inline(always)]
64	pub fn writen_fmt<'a, W: Write>(&self, w: W, fmt: Arguments<'a>) -> io::Result<()> {
65		C::writen_fmt(w, fmt)
66	}
67	
68	
69	#[inline(always)]
70	pub fn string_as<'a, A: AsRef<str>>(&self, asref: A) -> String {
71		C::string(asref.as_ref())
72	}
73	
74	#[inline(always)]
75	pub fn stringn_as<'a, A: AsRef<str>>(&self, asref: A) -> String {
76		C::stringn(asref.as_ref())
77	}
78	
79	#[inline(always)]
80	pub fn string<'a>(&self, str: &'a str) -> String {
81		C::string(str)
82	}
83	
84	#[inline(always)]
85	pub fn string_fmt<'a>(&self, fmt: Arguments<'a>) -> String {
86		C::string_fmt(fmt)
87	}
88	
89	
90	#[inline(always)]
91	pub fn stringn<'a>(&self, str: &'a str) -> String {
92		C::stringn(str)
93	}
94	
95	#[inline(always)]
96	pub fn stringn_fmt<'a>(&self, fmt: Arguments<'a>) -> String {
97		C::stringn_fmt(fmt)
98	}
99}
100
101
102
103impl<C: cluColor> Display for cluColorWriter<C> {
104	#[inline]
105	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
106		write!(f, "{}", self.name())
107	}
108}
109
110
111
112impl<'l, T: cluColor> cluColor for cluColorWriter<T> {
113	#[inline(always)]
114	fn raw_color<'a>() -> &'a str { T::raw_color() }
115	
116	#[inline(always)]
117	fn raw_color_b<'a>() -> &'a [u8] { T::raw_color_b() }
118	
119	#[inline(always)]
120	fn name<'a>() -> &'a str { T::name() }
121	
122
123	#[inline(always)]
124	fn writer() -> cluColorWriter<Self> where Self: Sized { cluColorWriter::<Self>::new() }
125	
126	
127	#[inline(always)]
128	fn string_as<'a, A: AsRef<str>>(asref: A) -> String { T::string_as(asref) }
129
130	#[inline(always)]
131	fn stringn_as<'a, A: AsRef<str>>(asref: A) -> String { T::stringn_as(asref) }
132	
133	#[inline(always)]
134	fn string_fmt<'a>(fmt: Arguments<'a>) -> String { T::string_fmt(fmt) }
135
136	#[inline(always)]
137	fn string<'a>(str: &'a str) -> String { T::string(str) }
138
139	#[inline(always)]
140	fn stringn<'a>(str: &'a str) -> String { T::stringn(str) }
141
142	#[inline(always)]
143	fn stringn_fmt<'a>(fmt: Arguments<'a>) -> String { T::stringn_fmt(fmt) }
144	
145	#[inline(always)]
146	fn write_as<'a, W: Write, A: AsRef<[u8]>>(w: W, asref: A) -> io::Result<()> { T::write_as(w, asref) }
147
148	#[inline(always)]
149	fn writen_as<'a, W: Write, A: AsRef<[u8]>>(w: W, asref: A) -> io::Result<()> { T::writen_as(w, asref) }
150
151	#[inline(always)]
152	fn write<'a, W: Write>(w: W, array: &'a [u8]) -> io::Result<()> { T::write(w, array) }
153
154	#[inline(always)]
155	fn write_str<'a, W: Write>(w: W, str: &'a str) -> io::Result<()> { T::write_str(w, str) }
156
157	#[inline(always)]
158	fn write_fmt<'a, W: Write>(w: W, fmt: Arguments<'a>) -> io::Result<()> { T::write_fmt(w, fmt) }
159
160	#[inline(always)]
161	fn writen<'a, W: Write>(w: W, array: &'a [u8]) -> io::Result<()> { T::writen(w, array) }
162	
163	#[inline(always)]
164	fn writen_str<'a, W: Write>(w: W, str: &'a str) -> io::Result<()> { T::writen_str(w, str) }
165
166	#[inline(always)]
167	fn writen_fmt<'a, W: Write>(w: W, fmt: Arguments<'a>) -> io::Result<()> { T::writen_fmt(w, fmt) }
168
169	#[inline(always)]
170	fn with_color_fmt<'a, F: Fn(&Arguments) -> C, C: 'a>(args: Arguments<'a>, function: F) -> C { T::with_color_fmt(args, function) }
171
172	#[inline(always)]
173	fn once_with_color_fmt<'a, F: FnOnce(&Arguments) -> C, C: 'a>(args: Arguments<'a>, function: F) -> C { T::once_with_color_fmt(args, function) }
174	
175	#[inline(always)]
176	fn mut_with_color_fmt<'a, F: FnMut(&Arguments) -> C, C: 'a>(args: Arguments<'a>, function: F) -> C { T::mut_with_color_fmt(args, function) }
177}