1#![warn(missing_docs)]
33#![warn(clippy::all)]
34#![warn(clippy::pedantic)]
35
36pub mod codegen;
37pub mod config;
38pub mod formatter;
39pub mod generator;
40
41pub use codegen::Codegen;
42pub use generator::{GenerateOptions, Generator};
43
44use thiserror::Error;
45
46#[derive(Error, Debug)]
48pub enum CodegenError {
49 #[error("Codegen error: {0}")]
51 Codegen(String),
52
53 #[error("Generation error: {0}")]
55 Generation(String),
56
57 #[error("Formatting error: {0}")]
59 Formatting(String),
60
61 #[error("IO error: {0}")]
63 Io(#[from] std::io::Error),
64
65 #[error("JSON error: {0}")]
67 Json(#[from] serde_json::Error),
68}
69
70pub type Result<T> = std::result::Result<T, CodegenError>;
72
73#[cfg(test)]
74mod tests {
75 use super::*;
76
77 #[test]
78 fn test_codegen_error_codegen_display() {
79 let error = CodegenError::Codegen("test codegen error".to_string());
80 assert_eq!(error.to_string(), "Codegen error: test codegen error");
81 }
82
83 #[test]
84 fn test_codegen_error_generation_display() {
85 let error = CodegenError::Generation("test generation error".to_string());
86 assert_eq!(error.to_string(), "Generation error: test generation error");
87 }
88
89 #[test]
90 fn test_codegen_error_formatting_display() {
91 let error = CodegenError::Formatting("test formatting error".to_string());
92 assert_eq!(error.to_string(), "Formatting error: test formatting error");
93 }
94
95 #[test]
96 fn test_codegen_error_io_from() {
97 let io_error = std::io::Error::new(std::io::ErrorKind::NotFound, "file not found");
98 let error: CodegenError = io_error.into();
99 assert!(matches!(error, CodegenError::Io(_)));
100 assert!(error.to_string().contains("file not found"));
101 }
102
103 #[test]
104 fn test_codegen_error_json_from() {
105 let json_str = "{ invalid json }";
106 let json_error = serde_json::from_str::<serde_json::Value>(json_str).unwrap_err();
107 let error: CodegenError = json_error.into();
108 assert!(matches!(error, CodegenError::Json(_)));
109 assert!(error.to_string().contains("JSON error"));
110 }
111}