bluejay_printer/executable/
executable_document.rs

1use 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}