2.8 Modules and Crates

Modules encapsulate Rust source code, concealing internal implementation details. Crates serve as the fundamental units of code compilation and distribution in Rust.

2.8.1 Modules

Rust uses modules (mod) to group related code, effectively replacing C's header-file scheme. All items in a module are private unless declared pub.

mod my_module {
    pub fn my_function() {
        println!("This is my function.");
    }
}

Using Modules

mod my_module {
    pub fn my_function() {
        println!("This is my function.");
    }
}

fn main() {
    my_module::my_function();
}

2.8.2 Splitting Modules Across Files

You can split modules into separate files:

  • Create my_module.rs for the module contents.
  • In your main file, add:
mod my_module;

2.8.3 Crates

A crate is a compilation unit in Rust. It can be:

  • Binary crate: An executable (has a main function).
  • Library crate: Shared functionality without a main.

2.8.4 Comparison with C

C typically organizes code with .h and .c files:

// my_module.h
void my_function();

// my_module.c
#include "my_module.h"
#include <stdio.h>

void my_function() {
    printf("This is my function.\n");
}

// main.c
#include "my_module.h"

int main() {
    my_function();
    return 0;
}