use std::collections::HashSet;
use anyhow::Result;
use prost_reflect::DescriptorPool;
use prost_types::compiler::code_generator_response::File;
pub mod model;
pub mod parse;
pub mod render;
pub mod validate;
pub mod temporal {
pub mod v1 {
include!(concat!(env!("OUT_DIR"), "/temporal.v1.rs"));
}
pub mod api {
pub mod enums {
pub mod v1 {
include!(concat!(env!("OUT_DIR"), "/temporal.api.enums.v1.rs"));
}
}
}
}
pub fn run_with_pool(
pool: &DescriptorPool,
files_to_generate: &HashSet<String>,
) -> Result<Vec<File>> {
let services = parse::parse(pool, files_to_generate)?;
let mut files = Vec::with_capacity(services.len());
for service in &services {
validate::validate(service)?;
let content = render::render(service);
let name = output_file_name(service);
files.push(File {
name: Some(name),
insertion_point: None,
content: Some(content),
generated_code_info: None,
});
}
Ok(files)
}
fn output_file_name(svc: &crate::model::ServiceModel) -> String {
let stem = svc.source_file.trim_end_matches(".proto");
format!("{stem}_temporal.rs")
}