gesha_core/conversions/
generator.rs

1use crate::conversions::Converter;
2use crate::io::{Reader, Writer};
3use crate::{Output, Result};
4use std::path::PathBuf;
5use tracing::debug;
6
7pub struct Generator<'a, A> {
8    converter: &'a A,
9    output: PathBuf,
10}
11
12impl<'a, A: Converter> Generator<'a, A> {
13    pub fn new(converter: &'a A, output: impl Into<PathBuf>) -> Self {
14        Self {
15            converter,
16            output: output.into(),
17        }
18    }
19
20    pub fn generate_from_file(&self, schema: impl Into<PathBuf>) -> Result<Output<()>> {
21        let reader = Reader::new(schema);
22        let (target, errors) = reader.open_target_type(self.converter)?.into_tuple();
23
24        let writer = Writer::new(&self.output);
25        writer.write_code(target)?;
26
27        let output = self.converter.format_code(&self.output)?;
28        debug!("format>\n{}", output);
29
30        Ok(Output::new((), errors))
31    }
32
33    pub fn generate_from_type(&self, target: A::TargetType) -> Result<()> {
34        let writer = Writer::new(&self.output);
35        writer.write_code(target)?;
36
37        let output = self.converter.format_code(&self.output)?;
38        debug!("format>\n{}", output);
39        Ok(())
40    }
41}