use proc_macro2::TokenStream;
use std::fmt::{Display, Formatter};
use crate::anon_unions::AnonUnions;
use crate::super_nodes;
#[derive(Debug, Default, Clone)]
pub struct GeneratedQueryTokens {
pub toplevel: TokenStream,
pub anon_unions: AnonUnions,
}
impl GeneratedQueryTokens {
pub fn new() -> Self {
Self::default()
}
pub fn append_tokens(&mut self, tokens: TokenStream) {
self.toplevel.extend(tokens);
}
pub fn append(&mut self, other: GeneratedQueryTokens) {
self.toplevel.extend(other.toplevel);
self.anon_unions.extend(other.anon_unions);
}
}
impl Extend<GeneratedQueryTokens> for GeneratedQueryTokens {
fn extend<T: IntoIterator<Item = GeneratedQueryTokens>>(&mut self, iter: T) {
for x in iter {
self.append(x)
}
}
}
impl FromIterator<GeneratedQueryTokens> for GeneratedQueryTokens {
fn from_iter<T: IntoIterator<Item = GeneratedQueryTokens>>(iter: T) -> Self {
let mut this = Self::new();
Extend::<GeneratedQueryTokens>::extend(&mut this, iter);
this
}
}
impl Display for GeneratedQueryTokens {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.clone().collapse(&super_nodes()))
}
}