pub mod audit;
pub mod canonicalize; pub mod code_graph;
pub mod concurrent;
pub mod dependency_validation;
pub mod docker_kubernetes; pub mod elixir; pub mod execution_lifecycle;
pub mod execution_proof;
pub mod executor;
pub mod go; pub mod incremental; pub mod incremental_cache;
#[allow(dead_code)]
pub mod lifecycle_hooks;
pub mod marketplace_integration;
pub mod merge;
pub mod pipeline;
pub mod proof_archive;
pub mod python;
pub mod terraform; pub mod transaction; pub mod typescript;
pub mod ux; pub mod watch;
pub mod watch_cache_integration;
pub mod watch_mode;
pub mod watch_mode_enhanced;
pub use audit::{AuditOutput, AuditStep, AuditTrail, AuditTrailBuilder};
pub use canonicalize::{
canonicalize, canonicalize_a2a, canonicalize_file, canonicalize_rust_quick, CanonicalizeOptions,
};
pub use code_graph::{
CodeEnum, CodeField, CodeGraphBuilder, CodeImpl, CodeImport, CodeItem, CodeMethod, CodeModule,
CodeParam, CodeStruct, CodeTrait, CodeVariant,
};
pub use concurrent::ConcurrentRuleExecutor;
pub use dependency_validation::{DependencyCheck, DependencyValidationReport, DependencyValidator};
pub use docker_kubernetes::{DockerKubernetesGenerator, Language, ServiceSpec};
pub use elixir::ElixirGenerator;
pub use execution_lifecycle::{ExecutionLifecycle, PostSyncContext, PreSyncContext};
pub use execution_proof::{ExecutionProof, ProofCarrier, RuleExecution};
pub use executor::{
OutputFormat, SyncExecutor, SyncOptions, SyncResult, SyncedFileInfo, ValidationCheck,
};
pub use go::GoCodeGenerator;
pub use incremental_cache::{CacheInvalidation, IncrementalCache};
pub use marketplace_integration::{MarketplaceValidator, PackageValidation, PreFlightReport};
pub use merge::{merge_sections, parse_merge_markers, MergeMarkers, MergedSections};
pub use pipeline::{
ExecutedRule, GeneratedFile, GenerationPipeline, PipelineState, RuleType, ValidationResult,
ValidationSeverity,
};
pub use proof_archive::{ChainVerification, ProofArchive};
pub use python::{Endpoint as PythonEndpoint, Field as PythonField, PythonGenerator};
pub use terraform::TerraformGenerator;
pub use transaction::{FileTransaction, TransactionReceipt};
pub use typescript::TypeScriptGenerator;
pub use watch_mode_enhanced::EnhancedWatchMode;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GeneratorLanguage {
Go,
Elixir,
Rust,
TypeScript,
Python,
Terraform,
}
#[derive(Debug)]
pub struct CodeGenError(pub String);
impl std::fmt::Display for CodeGenError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CodeGenError: {}", self.0)
}
}
impl std::error::Error for CodeGenError {}
pub fn generate_service(
language: GeneratorLanguage, service_name: &str, port: u16,
) -> Result<String, CodeGenError> {
match language {
GeneratorLanguage::Go => {
GoCodeGenerator::generate_service_struct(service_name, &[]).map_err(CodeGenError)
}
GeneratorLanguage::Elixir => {
let spec = elixir::ServiceSpec {
name: service_name.to_string(),
module_name: service_name.to_string(),
description: Some(format!("{} microservice (port {})", service_name, port)),
supervisor: None,
config: None,
};
ElixirGenerator::generate_module(&spec).map_err(CodeGenError)
}
GeneratorLanguage::Rust => {
Ok(format!(
"// Generated by ggen — Rust service: {name}\n//\n// Default port: {port}\n\npub struct {name};\n\nimpl {name} {{\n pub fn port() -> u16 {{ {port} }}\n}}\n",
name = service_name,
port = port,
))
}
GeneratorLanguage::TypeScript => {
Ok(format!(
"// Generated by ggen — TypeScript service: {name}\n\
// Default port: {port}\n\
\n\
export const SERVICE_NAME = \"{name}\";\n\
export const SERVICE_PORT = {port};\n",
name = service_name,
port = port,
))
}
GeneratorLanguage::Python => {
PythonGenerator::generate_main(service_name, port).map_err(CodeGenError)
}
GeneratorLanguage::Terraform => {
TerraformGenerator::generate_provider_block().map_err(CodeGenError)
}
}
}