Module visibility controls which parts of your code can be seen and used by other parts. It helps keep your code organized and safe.
Module visibility in Rust
mod my_module {
pub fn public_function() {
// code
}
fn private_function() {
// code
}
}pub means the item is public and can be used outside the module.
Without pub, items are private and only usable inside the module.
cook is public and can be called from outside kitchen. clean is private and only usable inside kitchen.mod kitchen {
pub fn cook() {
println!("Cooking food");
}
fn clean() {
println!("Cleaning kitchen");
}
}tools and its function hammer are public, so they can be accessed from outside garage. The function open_door is private.mod garage {
pub mod tools {
pub fn hammer() {
println!("Using hammer");
}
}
fn open_door() {
println!("Opening garage door");
}
}This program shows a module house with a public submodule living_room. The function watch_tv is public and can be called from main. The other functions are private and cannot be called from outside their modules.
mod house {
pub mod living_room {
pub fn watch_tv() {
println!("Watching TV in the living room");
}
fn clean_room() {
println!("Cleaning the living room");
}
}
fn lock_doors() {
println!("Locking all doors");
}
}
fn main() {
house::living_room::watch_tv();
// house::living_room::clean_room(); // This will cause an error because clean_room is private
// house::lock_doors(); // This will cause an error because lock_doors is private
}Use pub(crate) to make items visible only inside the current crate (project).
Modules can be nested, and visibility rules apply at each level.
Private items help keep your code safe by hiding details that should not be changed directly.
Module visibility controls what parts of code can be used outside their module.
pub makes items public; without it, items are private.
Use visibility to organize code and protect important parts.