Rust includes a module system for grouping code into logical groups, which may include structs, implementations, other modules etc. Module also give us the ability to manage module code’s visibility.
There’s a couple of ways for declaring our modules.
Option 1
Assuming we’ve used cargo init to create our project or simply laid out our code in the same way, then we’ll have a src folder and within that we’ll create a folder named math which will become our module name. Within math we add a file named mod.rs
src |--- math |--- mod.rs |--- main.rs
So here’s a very basic mod.rs file
pub fn add(a: i32, b: i32) -> i32 { a + b }
and here’s the main.rs file
mod math; fn main() { println!("{}", math::add(1, 2)); }
Option 2
The second option is to name the module file math.rs and this is stored at the same level as the main.rs file, i.e.
src |--- math.rs |--- main.rs
Nested Modules
We can also nest modules (modules within modules), for example
pub mod nested { pub fn add(a: i32, b: i32) -> i32 { a + b } } // in use mod math; fn main() { println!("{}", math::nested::add(1, 2)); }