2 releases
0.1.1 | Dec 4, 2024 |
---|---|
0.1.0 | Nov 30, 2024 |
#449 in Procedural macros
275 downloads per month
14KB
232 lines
doko
Run methods in submodules by name
Overview
doko
lets you include and run a method from a known submodule without importing and creating the
map from name to method yourself. Behind the scenes, the doko::doko!
macro:
- Finds all Rust files in the specified directory,
- Includes them with
mod
- Creates function
doko_<function>
that takes a module name and returns<module name>::<function>
. You can then call this function with whatever arguments you need.
Created to improve project layout for things like Project Euler and Advent of Code.
Usage
Project Layout
project/
└──── src/
├──── main.rs
└──── submod/
├───── a.rs
└───── b.rs
project/src/submod/a.rs
pub fn greeting(name: &str) -> u32 {
println!("Hello, {}, from a", name);
4
}
project/src/submod/b.rs
pub fn greeting(name: &str) -> u32 {
println!("Hello, {}, from b", name);
5
}
project/src/main.rs
doko::doko!("src/submod", "greeting", (&str) -> u32);
pub fn main() {
let name = "username";
assert_eq!(4, doko_greeting("a")(name));
assert_eq!(5, doko_greeting("b")(name));
}
TODO
- Provide a cleaner API than generated functions (i.e.
let registry = doko::doko!(...); registry.run(<module>);
)
Dependencies
~1.5MB
~37K SLoC