1pub mod ec;
12pub mod ecdsa;
13pub mod prelude;
14pub mod rabin;
15pub mod sdk;
16pub mod slh_dsa;
17pub mod test_keys;
18pub mod wots;
19
20pub use runar_lang_macros::{contract, methods, public, stateful_contract};
22
23pub fn compile_check(source: &str, file_name: &str) -> Result<(), String> {
35 let parse_result = runar_compiler_rust::frontend::parser::parse_source(source, Some(file_name));
36 if !parse_result.errors.is_empty() {
37 let msgs: Vec<String> = parse_result.errors.iter().map(|e| e.to_string()).collect();
38 return Err(format!("parse errors: {}", msgs.join("; ")));
39 }
40
41 let contract = parse_result
42 .contract
43 .ok_or_else(|| format!("no contract found in {}", file_name))?;
44
45 let validation = runar_compiler_rust::frontend::validator::validate(&contract);
46 if !validation.errors.is_empty() {
47 return Err(format!("validation errors: {}", validation.error_strings().join("; ")));
48 }
49
50 let tc = runar_compiler_rust::frontend::typecheck::typecheck(&contract);
51 if !tc.errors.is_empty() {
52 return Err(format!("type check errors: {}", tc.error_strings().join("; ")));
53 }
54
55 Ok(())
56}