1pub mod access_control_stub;
2pub mod deployer_stub;
3pub mod invariant_breaker;
4pub mod revert_stub;
5pub mod state_change_stub;
6pub mod teststubs;
7
8use std::{fmt, path::PathBuf};
9
10pub use access_control_stub::{
11 create_comprehensive_access_control_test_contract, generate_access_control_tests_from_cfg,
12};
13pub use revert_stub::{create_comprehensive_revert_test_contract, generate_revert_tests_from_cfg};
14pub use state_change_stub::{
15 create_comprehensive_state_change_test_contract, generate_state_change_tests_from_cfg,
16};
17pub use teststubs::generate_tests_with_foundry;
18
19#[derive(Debug)]
20pub enum CodeGenError {
21 FoundryError(String),
22 TemplateError(String),
23 IoError(PathBuf, std::io::Error),
24 ParseError(String),
25}
26
27impl std::error::Error for CodeGenError {}
28
29impl fmt::Display for CodeGenError {
30 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31 match self {
32 CodeGenError::FoundryError(msg) => write!(f, "Foundry error: {}", msg),
33 CodeGenError::TemplateError(msg) => write!(f, "Template error: {}", msg),
34 CodeGenError::IoError(path, err) => {
35 write!(f, "I/O error for path '{}': {}", path.display(), err)
36 }
37 CodeGenError::ParseError(msg) => write!(f, "Parse error: {}", msg),
38 }
39 }
40}
41
42impl From<std::io::Error> for CodeGenError {
43 fn from(err: std::io::Error) -> Self {
44 CodeGenError::IoError(PathBuf::new(), err)
45 }
46}