bluejay_printer/executable/
executable_document.rs1use crate::executable::{FragmentDefinitionPrinter, OperationDefinitionPrinter};
2use bluejay_core::executable::ExecutableDocument;
3use std::fmt::{Display, Formatter, Result};
4
5pub struct ExecutableDocumentPrinter<'a, T: ExecutableDocument> {
6 executable_document: &'a T,
7}
8
9impl<'a, T: ExecutableDocument> ExecutableDocumentPrinter<'a, T> {
10 pub fn new(executable_document: &'a T) -> Self {
11 Self {
12 executable_document,
13 }
14 }
15
16 pub fn to_string(executable_document: &'a T) -> String {
17 Self::new(executable_document).to_string()
18 }
19}
20
21impl<T: ExecutableDocument> Display for ExecutableDocumentPrinter<'_, T> {
22 fn fmt(&self, f: &mut Formatter<'_>) -> Result {
23 let Self {
24 executable_document,
25 } = *self;
26 executable_document
27 .operation_definitions()
28 .enumerate()
29 .try_for_each(|(idx, operation_definition)| {
30 if idx != 0 {
31 writeln!(f)?;
32 }
33 writeln!(
34 f,
35 "{}",
36 OperationDefinitionPrinter::new(operation_definition)
37 )
38 })?;
39
40 executable_document
41 .fragment_definitions()
42 .try_for_each(|fragment_definition| {
43 writeln!(f)?;
44 writeln!(f, "{}", FragmentDefinitionPrinter::new(fragment_definition))
45 })
46 }
47}