MCPcopy Create free account
hub / github.com/cowprotocol/services / generate

Method generate

contracts/src/codegen.rs:94–133  ·  view source on GitHub ↗

Generate contract crates under `output_dir`: - `contracts-generated/ /` per-contract crates - `contracts-facade/` facade crate that re-exports all contracts

(self, artifacts_dir: &Path, output_dir: &Path)

Source from the content-addressed store, hash-verified

92 /// - `contracts-generated/<name>/` per-contract crates
93 /// - `contracts-facade/` facade crate that re-exports all contracts
94 pub fn generate(self, artifacts_dir: &Path, output_dir: &Path) -> Result<()> {
95 let contracts_generated_dir = output_dir.join("contracts-generated");
96 let facade_dir = output_dir.join("contracts-facade");
97
98 std::fs::create_dir_all(&contracts_generated_dir)?;
99 std::fs::create_dir_all(&facade_dir)?;
100
101 // Collect all contracts with their submodule association, then
102 // generate crates in parallel.
103 let entries: Vec<CrateEntry> = self
104 .contracts
105 .iter()
106 .map(|c| (c, None))
107 .chain(
108 self.submodules
109 .iter()
110 .flat_map(|s| s.contracts.iter().map(move |c| (c, Some(s.name.clone())))),
111 )
112 .collect::<Vec<_>>()
113 .into_par_iter()
114 .map(|(contract, submodule)| {
115 contract.write_crate(artifacts_dir, &contracts_generated_dir)?;
116 Ok(CrateEntry {
117 contract_name: contract.name.clone(),
118 crate_name: to_crate_name(&contract.name),
119 dir_name: to_dir_name(&contract.name),
120 submodule,
121 })
122 })
123 .collect::<Result<Vec<_>>>()?;
124
125 let mut entries = entries;
126 entries.sort_by_key(|entry| entry.crate_name.clone());
127
128 // Generate the facade crate
129 write_facade_lib(&entries, &facade_dir)?;
130 write_facade_cargo_toml(&entries, &facade_dir)?;
131
132 Ok(())
133 }
134}
135
136/// Generate the facade crate's lib.rs file.

Callers 1

run_generateFunction · 0.80

Calls 8

to_crate_nameFunction · 0.85
to_dir_nameFunction · 0.85
write_facade_libFunction · 0.85
write_facade_cargo_tomlFunction · 0.85
write_crateMethod · 0.80
chainMethod · 0.45
iterMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected