bluejay-printer 0.3.1

A GraphQL printer
Documentation
use bluejay_core::definition::{InterfaceImplementation, InterfaceImplementations};
use std::fmt::{Display, Formatter, Result};

pub(crate) struct InterfaceImplementationsPrinter<'a, I: InterfaceImplementations>(&'a I);

impl<'a, I: InterfaceImplementations> InterfaceImplementationsPrinter<'a, I> {
    pub(crate) fn new(interface_implementations: &'a I) -> Self {
        Self(interface_implementations)
    }
}

impl<I: InterfaceImplementations> Display for InterfaceImplementationsPrinter<'_, I> {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        let Self(interface_implementations) = *self;
        if !interface_implementations.is_empty() {
            write!(f, " implements ")?;
            interface_implementations
                .iter()
                .enumerate()
                .try_for_each(|(idx, ii)| {
                    if idx != 0 {
                        write!(f, " & ")?;
                    }
                    write!(f, "{}", ii.name())
                })
        } else {
            Ok(())
        }
    }
}