use super::atoms::{AtomBuilder, AtomSiteRow};
use super::ragged::RaggedBuilder;
use std::fmt;
enum Target<'a, 'b> {
Atom(&'a mut AtomBuilder<'b>),
Ragged(&'a mut RaggedBuilder<'b>),
}
#[doc(hidden)]
pub struct RowFeeder<'a, 'b> {
target: Target<'a, 'b>,
}
impl<'a, 'b> RowFeeder<'a, 'b> {
pub(super) fn atom(builder: &'a mut AtomBuilder<'b>) -> Self {
Self {
target: Target::Atom(builder),
}
}
pub(super) fn ragged(builder: &'a mut RaggedBuilder<'b>) -> Self {
Self {
target: Target::Ragged(builder),
}
}
pub fn feed<R: AtomSiteRow + ?Sized>(&mut self, row: &R) {
match &mut self.target {
Target::Atom(builder) => builder.feed(row),
Target::Ragged(builder) => builder.feed(row),
}
}
}
impl fmt::Debug for RowFeeder<'_, '_> {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.debug_struct("RowFeeder").finish_non_exhaustive()
}
}