1mod json;
2mod string;
3mod types;
4
5pub use json::ManticoreInterface;
6use std::{env, io::Write};
7pub use types::{CircuitInterface, Value};
8
9pub fn write_interface(
10 interface: String,
11 circuit_name: &str,
12 out_dir: &Option<String>,
13) -> Result<(), std::io::Error> {
14 use crate::string::snake_case_to_camel_case;
15
16 const DEFAULT_CIRCUIT_OUT_DIR: &str = "build";
17
18 let current_dir = env::current_dir()?;
19
20 let circuits_dir = current_dir.join(out_dir.as_deref().unwrap_or(DEFAULT_CIRCUIT_OUT_DIR));
21 let file_path = circuits_dir.join(format!("{circuit_name}.idarc"));
22 let ts_file_path = circuits_dir.join(format!("{circuit_name}.ts"));
23
24 std::fs::create_dir_all(&circuits_dir)?;
25
26 let mut file = std::fs::File::create(file_path)?;
27 let interface_bytes = interface.into_bytes();
28 file.write_all(&interface_bytes)?;
29
30 let mut ts_file = std::fs::File::create(ts_file_path)?;
31 let camel_case_name = snake_case_to_camel_case(circuit_name);
33 ts_file.write_all(
34 &[
35 &format!("export type {} = ", camel_case_name).into_bytes()[..],
36 &interface_bytes[..],
37 ]
38 .concat(),
39 )?;
40
41 Ok(())
42}