gesha_core/conversions/
generator.rs1use crate::conversions::Converter;
2use crate::io::{Reader, Writer};
3use crate::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<()> {
21 let reader = Reader::new(schema);
22 let target = reader.open_target_type(self.converter)?;
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 Ok(())
30 }
31
32 pub fn generate_from_type(&self, target: A::TargetType) -> Result<()> {
33 let writer = Writer::new(&self.output);
34 writer.write_code(target)?;
35
36 let output = self.converter.format_code(&self.output)?;
37 debug!("format>\n{}", output);
38 Ok(())
39 }
40}