use crate::compiler::value::values::Value;
pub trait Sink {
fn accept(&mut self, row: &[Value]);
}
#[derive(Default)]
pub struct PrintingSink {}
impl Sink for PrintingSink {
fn accept(&mut self, row: &[Value]) {
print!("[");
for (position, value) in row.iter().enumerate() {
print!("{}", value);
if position < row.len() - 1 {
print!(", ")
}
}
println!("]");
}
}
#[derive(Default)]
pub struct AccumulatingSink {
pub storage: Vec<Vec<Value>>,
}
impl Sink for AccumulatingSink {
fn accept(&mut self, row: &[Value]) {
self.storage.push(row.to_vec())
}
}
impl AccumulatingSink {
pub fn clear(&mut self) {
self.storage.clear();
}
}