oxur_comp/
codegen.rs

1//! Stage 4: Generate
2//!
3//! Converts Rust AST into formatted Rust source code.
4
5use crate::Result;
6
7/// Code generator produces formatted Rust source
8pub struct CodeGenerator;
9
10impl CodeGenerator {
11    pub fn new() -> Self {
12        Self
13    }
14
15    /// Generate formatted Rust source from AST
16    pub fn generate(&self, file: &syn::File) -> Result<String> {
17        // Use prettyplease for formatting
18        Ok(prettyplease::unparse(file))
19    }
20}
21
22impl Default for CodeGenerator {
23    fn default() -> Self {
24        Self::new()
25    }
26}
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31
32    #[test]
33    fn test_codegen_empty_file() {
34        let gen = CodeGenerator::new();
35        let file = syn::File { shebang: None, attrs: vec![], items: vec![] };
36        let result = gen.generate(&file);
37        assert!(result.is_ok());
38    }
39
40    #[test]
41    fn test_codegen_default() {
42        let gen = CodeGenerator::default();
43        let file = syn::File { shebang: None, attrs: vec![], items: vec![] };
44        let result = gen.generate(&file);
45        assert!(result.is_ok());
46    }
47
48    #[test]
49    fn test_generate_returns_string() {
50        let gen = CodeGenerator::new();
51        let file = syn::File { shebang: None, attrs: vec![], items: vec![] };
52        let result = gen.generate(&file).unwrap();
53        assert!(result.is_empty() || !result.is_empty()); // Just check it's a string
54    }
55}