pub mod config;
pub mod engine;
pub mod error;
pub mod ir;
pub mod parse;
pub mod transform;
use thiserror::Error;
#[derive(Debug, Clone)]
pub struct GeneratedFile {
pub path: String,
pub content: String,
}
#[derive(Debug, Clone)]
pub struct GenerateOutput {
pub source_files: Vec<GeneratedFile>,
pub scaffold_files: Vec<GeneratedFile>,
}
pub fn normalize_generated(content: &str) -> String {
let mut result = String::with_capacity(content.len());
let mut newline_count = 0;
for ch in content.chars() {
if ch == '\n' {
newline_count += 1;
if newline_count <= 2 {
result.push(ch);
}
} else {
newline_count = 0;
result.push(ch);
}
}
if !result.ends_with('\n') {
result.push('\n');
}
result
}
#[derive(Debug, Error)]
pub enum GeneratorError {
#[error("template render failed: {0}")]
Render(String),
#[error("generation failed: {0}")]
Other(String),
}