1use super::generate::Source;
4use std::io::Write;
5use tpchgen::generators::{
6 CustomerGenerator, LineItemGenerator, NationGenerator, OrderGenerator, PartGenerator,
7 PartSuppGenerator, RegionGenerator, SupplierGenerator,
8};
9
10macro_rules! define_tbl_source {
12 ($SOURCE_NAME:ident, $GENERATOR_TYPE:ty) => {
13 pub struct $SOURCE_NAME {
14 inner: $GENERATOR_TYPE,
15 }
16
17 impl $SOURCE_NAME {
18 pub fn new(inner: $GENERATOR_TYPE) -> Self {
19 Self { inner }
20 }
21 }
22
23 impl Source for $SOURCE_NAME {
24 fn header(&self, buffer: Vec<u8>) -> Vec<u8> {
25 buffer
27 }
28
29 fn create(self, mut buffer: Vec<u8>) -> Vec<u8> {
30 for item in self.inner.iter() {
31 writeln!(&mut buffer, "{item}").expect("writing to memory is infallible");
33 }
34 buffer
35 }
36 }
37 };
38}
39
40define_tbl_source!(NationTblSource, NationGenerator<'static>);
42define_tbl_source!(RegionTblSource, RegionGenerator<'static>);
43define_tbl_source!(PartTblSource, PartGenerator<'static>);
44define_tbl_source!(SupplierTblSource, SupplierGenerator<'static>);
45define_tbl_source!(PartSuppTblSource, PartSuppGenerator<'static>);
46define_tbl_source!(CustomerTblSource, CustomerGenerator<'static>);
47define_tbl_source!(OrderTblSource, OrderGenerator<'static>);
48define_tbl_source!(LineItemTblSource, LineItemGenerator<'static>);