graphql_toolkit_writer/fmt/
formatter.rs1use std::io;
2
3pub trait Formatter {
5 #[inline]
7 fn write_raw<W>(&mut self, writer: &mut W, fragment: &str) -> io::Result<()>
8 where
9 W: ?Sized + io::Write,
10 {
11 writer.write_all(fragment.as_bytes())
12 }
13
14 #[inline]
15 fn write_keyword<W>(&mut self, writer: &mut W, name: &str) -> io::Result<()>
16 where
17 W: ?Sized + io::Write,
18 {
19 writer.write_all(name.as_bytes())
20 }
21
22 #[inline]
47 fn write_separator<W>(&mut self, writer: &mut W) -> io::Result<()>
48 where
49 W: ?Sized + io::Write,
50 {
51 writer.write_all(b" ")
52 }
53
54 #[inline]
55 fn before_operation_or_fragment_definition<W>(&mut self, _writer: &mut W) -> io::Result<()>
56 where
57 W: ?Sized + io::Write,
58 {
59 Ok(())
60 }
61
62 #[inline]
63 fn before_operation_variable_definitions<W>(&mut self, _writer: &mut W) -> io::Result<()>
64 where
65 W: ?Sized + io::Write,
66 {
67 Ok(())
68 }
69
70 #[inline]
72 fn after_operation_or_fragment_signature<W>(&mut self, _writer: &mut W) -> io::Result<()>
73 where
74 W: ?Sized + io::Write,
75 {
76 Ok(())
77 }
78
79 #[inline]
80 fn after_selection_signature<W>(&mut self, _writer: &mut W) -> io::Result<()>
81 where
82 W: ?Sized + io::Write,
83 {
84 Ok(())
85 }
86
87 #[inline]
88 fn before_type_condition<W>(&mut self, _writer: &mut W) -> io::Result<()>
89 where
90 W: ?Sized + io::Write,
91 {
92 Ok(())
93 }
94
95 #[inline]
96 fn before_directive<W>(&mut self, _writer: &mut W) -> io::Result<()>
97 where
98 W: ?Sized + io::Write,
99 {
100 Ok(())
101 }
102
103 #[inline]
106 fn write_string_fragment<W>(&mut self, writer: &mut W, fragment: &str) -> io::Result<()>
107 where
108 W: ?Sized + io::Write,
109 {
110 writer.write_all(fragment.as_bytes())
111 }
112
113 #[inline]
117 fn begin_variable<W>(&mut self, writer: &mut W) -> io::Result<()>
118 where
119 W: ?Sized + io::Write,
120 {
121 writer.write_all(b"$")
122 }
123
124 #[inline]
128 fn write_non_null_type_indicator<W>(&mut self, writer: &mut W) -> io::Result<()>
129 where
130 W: ?Sized + io::Write,
131 {
132 writer.write_all(b"!")
133 }
134
135 #[inline]
139 fn begin_directive<W>(&mut self, writer: &mut W) -> io::Result<()>
140 where
141 W: ?Sized + io::Write,
142 {
143 writer.write_all(b"@")
144 }
145
146 fn write_name_value_separator<W>(&mut self, writer: &mut W) -> io::Result<()>
148 where
149 W: ?Sized + io::Write,
150 {
151 writer.write_all(b":")
152 }
153
154 fn write_variable_default_value_separator<W>(&mut self, writer: &mut W) -> io::Result<()>
158 where
159 W: ?Sized + io::Write,
160 {
161 writer.write_all(b"=")
162 }
163
164 fn write_item_separator<W>(&mut self, writer: &mut W) -> io::Result<()>
185 where
186 W: ?Sized + io::Write,
187 {
188 writer.write_all(b",")
189 }
190
191 #[inline]
193 fn begin_parentheses<W>(&mut self, writer: &mut W) -> io::Result<()>
194 where
195 W: ?Sized + io::Write,
196 {
197 writer.write_all(b"(")
198 }
199
200 #[inline]
202 fn end_parentheses<W>(&mut self, writer: &mut W) -> io::Result<()>
203 where
204 W: ?Sized + io::Write,
205 {
206 writer.write_all(b")")
207 }
208
209 #[inline]
211 fn begin_block<W>(&mut self, writer: &mut W) -> io::Result<()>
212 where
213 W: ?Sized + io::Write,
214 {
215 writer.write_all(b"{")
216 }
217
218 #[inline]
220 fn end_block<W>(&mut self, writer: &mut W) -> io::Result<()>
221 where
222 W: ?Sized + io::Write,
223 {
224 writer.write_all(b"}")
225 }
226
227 #[inline]
228 fn before_block_item<W>(&mut self, _writer: &mut W) -> io::Result<()>
229 where
230 W: ?Sized + io::Write,
231 {
232 Ok(())
233 }
234
235 #[inline]
236 fn after_block_item<W>(&mut self, writer: &mut W) -> io::Result<()>
237 where
238 W: ?Sized + io::Write,
239 {
240 writer.write_all(b",")
241 }
242
243 #[inline]
244 fn begin_string<W>(&mut self, writer: &mut W) -> io::Result<()>
245 where
246 W: ?Sized + io::Write,
247 {
248 writer.write_all(b"\"")
249 }
250
251 #[inline]
252 fn end_string<W>(&mut self, writer: &mut W) -> io::Result<()>
253 where
254 W: ?Sized + io::Write,
255 {
256 writer.write_all(b"\"")
257 }
258
259 #[inline]
261 fn begin_array<W>(&mut self, writer: &mut W) -> io::Result<()>
262 where
263 W: ?Sized + io::Write,
264 {
265 writer.write_all(b"[")
266 }
267
268 #[inline]
270 fn end_array<W>(&mut self, writer: &mut W) -> io::Result<()>
271 where
272 W: ?Sized + io::Write,
273 {
274 writer.write_all(b"]")
275 }
276
277 #[inline]
281 fn write_byte_array<W>(&mut self, writer: &mut W, value: &[u8]) -> io::Result<()>
282 where
283 W: ?Sized + io::Write,
284 {
285 self.begin_array(writer)?;
286
287 let mut bytes = value.iter().peekable();
288 while let Some(byte) = bytes.next() {
289 self.write_u8(writer, *byte)?;
290
291 if bytes.peek().is_some() {
292 writer.write_all(b",")?;
293 }
294 }
295
296 self.end_array(writer)?;
297
298 Ok(())
299 }
300
301 #[inline]
303 fn begin_object<W>(&mut self, writer: &mut W) -> io::Result<()>
304 where
305 W: ?Sized + io::Write,
306 {
307 writer.write_all(b"{")
308 }
309
310 #[inline]
312 fn end_object<W>(&mut self, writer: &mut W) -> io::Result<()>
313 where
314 W: ?Sized + io::Write,
315 {
316 writer.write_all(b"}")
317 }
318
319 #[inline]
321 fn write_null<W>(&mut self, writer: &mut W) -> io::Result<()>
322 where
323 W: ?Sized + io::Write,
324 {
325 writer.write_all(b"null")
326 }
327
328 #[inline]
330 fn write_bool<W>(&mut self, writer: &mut W, value: bool) -> io::Result<()>
331 where
332 W: ?Sized + io::Write,
333 {
334 writer.write_all(if value { b"true" } else { b"false" })
335 }
336
337 #[inline]
339 fn write_u8<W>(&mut self, writer: &mut W, value: u8) -> io::Result<()>
340 where
341 W: ?Sized + io::Write,
342 {
343 let mut buffer = itoa::Buffer::new();
344 let s = buffer.format(value);
345 writer.write_all(s.as_bytes())
346 }
347
348 #[inline]
350 fn write_u64<W>(&mut self, writer: &mut W, value: u64) -> io::Result<()>
351 where
352 W: ?Sized + io::Write,
353 {
354 let mut buffer = itoa::Buffer::new();
355 let s = buffer.format(value);
356 writer.write_all(s.as_bytes())
357 }
358
359 #[inline]
361 fn write_i64<W>(&mut self, writer: &mut W, value: i64) -> io::Result<()>
362 where
363 W: ?Sized + io::Write,
364 {
365 let mut buffer = itoa::Buffer::new();
366 let s = buffer.format(value);
367 writer.write_all(s.as_bytes())
368 }
369
370 #[inline]
372 fn write_f64<W>(&mut self, writer: &mut W, value: f64) -> io::Result<()>
373 where
374 W: ?Sized + io::Write,
375 {
376 let mut buffer = ryu::Buffer::new();
377 let s = buffer.format_finite(value);
378 writer.write_all(s.as_bytes())
379 }
380}