use crate::{
Result, Rudof,
api::generation::GenerationOperations,
formats::{DataFormat, GenerationSchemaFormat, InputSpec},
};
use std::path::PathBuf;
pub struct GenerateDataBuilder<'a> {
rudof: &'a Rudof,
schema: &'a InputSpec,
schema_format: &'a GenerationSchemaFormat,
output: Option<&'a PathBuf>,
config_file: Option<&'a PathBuf>,
result_generation_format: Option<&'a DataFormat>,
number_entities: usize,
seed: Option<u64>,
parallel: Option<usize>,
}
impl<'a> GenerateDataBuilder<'a> {
pub(crate) fn new(
rudof: &'a Rudof,
schema: &'a InputSpec,
schema_format: &'a GenerationSchemaFormat,
number_entities: usize,
) -> Self {
Self {
rudof,
schema,
schema_format,
result_generation_format: None,
number_entities,
seed: None,
parallel: None,
output: None,
config_file: None,
}
}
pub fn with_result_generation_format(mut self, result_generation_format: &'a DataFormat) -> Self {
self.result_generation_format = Some(result_generation_format);
self
}
pub fn with_seed(mut self, seed: u64) -> Self {
self.seed = Some(seed);
self
}
pub fn with_parallel(mut self, parallel: usize) -> Self {
self.parallel = Some(parallel);
self
}
pub fn with_output(mut self, output: &'a PathBuf) -> Self {
self.output = Some(output);
self
}
pub async fn execute(self) -> Result<()> {
<Rudof as GenerationOperations>::generate_data(
self.rudof,
self.schema,
self.schema_format,
self.result_generation_format,
self.output,
self.config_file,
self.number_entities,
self.seed,
self.parallel,
)
.await
}
}