momo

Keep your compile time during MOnoMOrphization badge

This is a proc_macro crate to help keeping the code footprint of generic methods in check. Often, generics are used in libraries to improve ergonomics. However, this has a cost in compile time and binary size. Optimally, one creates a small shell function that does the generic conversions and then calls an inner function, but that makes the code less readable.

Add a #[momo] annotation from this crate to split your function into an outer conversion and a private inner function. In return, you get some compile time for a tiny bit of runtime (if at all) – without impairing readability.

Conversions currently supported are Into (.into()), AsRef (.as_ref()), and AsMut (.as_mut()). See enum Conversions in code.

Notes on watt

This new updated version uses D. Tolnay's [watt] runtime to speed up the compile time, which was negatively affected with proc macro baggage.

The main crate uses a pre-built wasm containing the tagged version. Rebuilding the wasm can be done with the commands:

```bash cd wasm cargo build --release --target wasm32-unknown-unknown

If wasm-opt is unavailable, copying the file is fine.

wasm-opt target/wasm32-unknown-unknown/release/momo_watt.wasm -Oz \ --strip-debug --simplify-globals --vacuum -o ../src/momo.wasm ```

You might need to add the wasm32-unknown-unknown target to your Rust toolchain.

(If you are tagging a new version, remember to commit the new wasm file. Also change the versions in both Cargo.toml files.)

Debugging the macro

The [cargo-expand] tool may be used to expand the output of macro expansion, including from this proc-macro. To examine the results of the example file, use cargo expand --example check.