From 983bc924942108beb59d8aa42ad8377e85f0cac8 Mon Sep 17 00:00:00 2001 From: Simon Oberzier Date: Thu, 11 Jun 2026 22:00:05 +0200 Subject: [PATCH] Cobol file compilation --- code/src/main.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/code/src/main.rs b/code/src/main.rs index 69998ce..24fa381 100644 --- a/code/src/main.rs +++ b/code/src/main.rs @@ -8,6 +8,8 @@ use std::fs::File; use std::io::Read; use std::net::SocketAddr; use std::sync::Arc; +use std::path::Path; +use std::process::Command; #[derive(Debug, Serialize, Deserialize)] struct ApiConfig { @@ -35,13 +37,6 @@ struct Argument { source: String, } -#[repr(C, packed)] -struct Student { - st_id: [u8; 5], - first_name: [u8; 20], - last_name: [u8; 20], -} - #[tokio::main] async fn main() -> Result<(), Box> { let config = read_conf("api.yaml")?; @@ -53,6 +48,25 @@ async fn main() -> Result<(), Box> { for endpoint in config.endpoints.into_iter() { println!("Binding route {}", endpoint.path); + let cobol_path = Path::new(&endpoint.cobol_source); + let working_dir = cobol_path.parent().unwrap_or_else(|| Path::new(".")); + let file_name = cobol_path.file_name() + .ok_or("Invalid COBOL filename")?; + let library_name = Path::new(file_name) + .with_extension("so"); + let file_name_str = file_name.to_str().ok_or("Filename conversion error")?; + let library_name_str = library_name.to_str().ok_or("Library name conversion error")?; + let output = Command::new("cobc") + .current_dir(working_dir) + .args(["-m", "-O", "-o", library_name_str, file_name_str]) + .output()?; + + if !output.status.success() { + eprintln!("COBOL Compilation failed:\n{}", String::from_utf8_lossy(&output.stderr)); + std::process::exit(1); + } + println!("Compilation successful: {} generated.", endpoint.cobol_source.replace(".cbl", ".so").as_str()); + let path = endpoint.path.clone(); app = app.route(&path, get(cobol_handler).layer(Extension(Arc::new(endpoint))));