Write a per-contract crate to the contracts-generated directory.
(&self, artifacts_dir: &Path, contracts_generated_dir: &Path)
| 347 | |
| 348 | /// Write a per-contract crate to the contracts-generated directory. |
| 349 | fn write_crate(&self, artifacts_dir: &Path, contracts_generated_dir: &Path) -> Result<()> { |
| 350 | let crate_name = to_crate_name(&self.name); |
| 351 | let dir_name = to_dir_name(&self.name); |
| 352 | let crate_dir = contracts_generated_dir.join(&dir_name); |
| 353 | let src_dir = crate_dir.join("src"); |
| 354 | std::fs::create_dir_all(&src_dir)?; |
| 355 | |
| 356 | // Generate Cargo.toml |
| 357 | let cargo_toml = CARGO_TOML_TEMPLATE.replace("{crate_name}", &crate_name); |
| 358 | std::fs::write(crate_dir.join("Cargo.toml"), cargo_toml)?; |
| 359 | |
| 360 | // Generate lib.rs |
| 361 | let token_stream = self.generate_code(artifacts_dir)?; |
| 362 | let mut buffer = String::from(LIB_HEADER); |
| 363 | write!(buffer, "{}", token_stream)?; |
| 364 | let file: syn::File = syn::parse_file(&buffer) |
| 365 | .with_context(|| format!("parsing generated code for {}", self.name))?; |
| 366 | let formatted = prettyplease::unparse(&file); |
| 367 | std::fs::write(src_dir.join("lib.rs"), formatted)?; |
| 368 | |
| 369 | eprintln!(" generated crate: {crate_name} (contracts-generated/{dir_name})"); |
| 370 | Ok(()) |
| 371 | } |
| 372 | } |
| 373 | |
| 374 | fn generate_binding(instance: &mut SolMacroGen, all_derives: bool) -> Result<()> { |
no test coverage detected