pub mod commands;
pub mod errors;
pub mod generate_client;
pub mod generate_server;
pub mod template_management;
pub mod traits;
pub use commands::*;
pub use errors::*;
pub use template_management::*;
pub use traits::*;
#[cfg(test)]
mod tests {
use super::*;
use crate::generation::Language;
use crate::protocols::Protocol;
use std::collections::HashMap;
use std::path::PathBuf;
#[test]
fn test_generate_server_request_validation() {
let request = GenerateServerRequest {
protocol: Protocol::Mcp,
language: Language::Rust,
project_name: "test-server".to_string(),
schema_path: Some("/path/to/openapi.yaml".to_string()),
output_dir: PathBuf::from("/output"),
options: HashMap::new(),
};
assert!(request.validate().is_ok());
let mut invalid_request = request.clone();
invalid_request.project_name = "".to_string();
assert!(invalid_request.validate().is_err());
}
#[test]
fn test_generate_client_request_validation() {
let request = GenerateClientRequest {
protocol: Protocol::Mcp,
language: Language::Rust,
project_name: "test-client".to_string(),
output_dir: PathBuf::from("/output"),
options: HashMap::new(),
};
assert!(request.validate().is_ok());
let mut invalid_request = request.clone();
invalid_request.protocol = Protocol::Anp; assert!(invalid_request.validate().is_err());
}
#[tokio::test]
async fn test_generate_server_use_case_success() {
let request = GenerateServerRequest {
protocol: Protocol::Mcp,
language: Language::Rust,
project_name: "test-server".to_string(),
schema_path: Some("/path/to/openapi.yaml".to_string()),
output_dir: PathBuf::from("/output"),
options: HashMap::new(),
};
assert!(request.validate().is_ok());
let acp_request = GenerateServerRequest {
protocol: Protocol::Acp,
language: Language::Rust,
project_name: "test-acp-server".to_string(),
schema_path: None,
output_dir: PathBuf::from("/output"),
options: HashMap::new(),
};
assert!(acp_request.validate().is_ok());
let invalid_mcp = GenerateServerRequest {
protocol: Protocol::Mcp,
language: Language::Rust,
project_name: "test-mcp-server".to_string(),
schema_path: None,
output_dir: PathBuf::from("/output"),
options: HashMap::new(),
};
let result = invalid_mcp.validate();
assert!(result.is_err());
match result.unwrap_err() {
ValidationError::MissingField(msg) => {
assert!(msg.contains("MCP server requires OpenAPI"));
}
_ => panic!("Expected MissingField error"),
}
}
#[test]
fn test_application_error_types() {
let error = ApplicationError::ProtocolError(
crate::protocols::ProtocolError::NotImplemented(Protocol::Mcp),
);
match error {
ApplicationError::ProtocolError(crate::protocols::ProtocolError::NotImplemented(p)) => {
assert_eq!(p, Protocol::Mcp)
}
_ => panic!("Expected ProtocolError::NotImplemented"),
}
let validation_error = ValidationError::EmptyProjectName;
match validation_error {
ValidationError::EmptyProjectName => {}
_ => panic!("Expected EmptyProjectName"),
}
}
#[test]
fn test_generate_client_use_case_types() {
let request = GenerateClientRequest {
protocol: Protocol::Mcp,
language: Language::Rust,
project_name: "test-client".to_string(),
output_dir: PathBuf::from("/output"),
options: HashMap::new(),
};
assert!(request.validate().is_ok());
}
}