Rust modules structure in a nutshell

Rust module structure in a nutshell.

File tree:

.
├── Cargo.lock
├── Cargo.toml
├── src
│   ├── main.rs
│   ├── my_modules_in_rootdir.rs
│   ├── my_modules_with_modrs
│   │   ├── mod.rs
│   │   ├── submod_a.rs
│   │   └── submod_b.rs
│   ├── my_modules_without_modrs
│   │   ├── submod_1.rs
│   │   └── submod_2.rs
│   └── my_modules_without_modrs.rs
\

Module tree (this nice module tree is generated by cargo-modules)

crate modules
├── mod my_module_in_main: pub(crate)
│   └── mod my_mod_in_main_nested: pub
├── mod my_modules_in_rootdir: pub(crate)
├── mod my_modules_with_modrs: pub(crate)
│   ├── mod submod_a: pub
│   └── mod submod_b: pub
└── mod my_modules_without_modrs: pub(crate)
    ├── mod submod_1: pub
    └── mod submod_2: pub

/src/main.rs

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#![allow(dead_code)]
// declare module in the root dir, so that this module is added to the
// module tree
mod my_modules_in_rootdir; 
mod my_modules_with_modrs;
mod my_modules_without_modrs;
mod my_module_in_main {
    // DESCRIPTION IS PRIVATE TO my_mod
    const DESCRIPTION: &str = "This module is defined as `mod my_mod_in_main{{...}}` in main.rs";
    pub fn desc() {
       println!("{}", DESCRIPTION);
    }
    }
    pub mod my_mod_in_main_nested {
        // DESCRIPTION PRIVATE TO my_mod::my_mod_nested
        const DESCRIPTION: &str = "This module is defined as a nested mod in my_mod_in_main` in main.rs";
        pub fn desc() {
           println!("{}", DESCRIPTION);
        }
    }
}

fn main() {
    println!("Hello, world from main()");
    my_module_in_main::desc();
    my_module_in_main::my_mod_in_main_nested::desc();
    my_modules_in_rootdir::desc();
    my_modules_with_modrs::desc();
    my_modules_with_modrs::submod_a::desc();
    my_modules_with_modrs::submod_b::desc();
    my_modules_without_modrs::submod_1::desc();
    my_modules_without_modrs::submod_2::desc();
}

/src/my_modules_in_rootdir

1
2
3
4
const DESCRIPTION: &str = "This module is defined in src/my_modules_in_rootdir.rs, and declared in main.rs";
pub fn desc() {
    println!("{}", DESCRIPTION);
}

/src/my_modules_without_modrs.rs

1
2
3
4
// This is bad, you need this file in root dir to declare the module into the module tree anyways,
// why don't you just move this file to somemodule/mod.rs ?? 
pub mod submod_1;
pub mod submod_2;

/src/my_modules_without_modrs/submod_1.rs

1
2
3
4
const DESCRIPTION: &str = "This module is /src/my_modules_without_modrs/submod_1, module declared in /src/my_modules_without_modrs.rs";
pub fn desc() {
    println!("{}", DESCRIPTION);
}

/src/my_modules_without_modrs/submod_2.rs

1
2
3
4
const DESCRIPTION: &str = "This module is /src/my_modules_without_modrs/submod_2, module declared in /src/my_modules_without_modrs.rs";
pub fn desc() {
    println!("{}", DESCRIPTION);
}

/src/my_modules_with_modrs/mod.rs

1
2
3
4
5
6
7
pub mod submod_a;
pub mod submod_b;

const DESCRIPTION: &str = "This module is /src/my_modules_with_modrs, function declared in mod.rs";
pub fn desc() {
    println!("{}", DESCRIPTION);
}

/src/my_modules_with_modrs/submod_a.rs

1
2
3
4
const DESCRIPTION: &str = "This module is /src/my_modules_with_modrs/submod_a, module declared in mod.rs";
pub fn desc() {
    println!("{}", DESCRIPTION);
}

/src/my_modules_with_modrs/submod_b.rs

1
2
3
4
const DESCRIPTION: &str = "This module is /src/my_modules_with_modrs/submod_b, module declared in mod.rs";
pub fn desc() {
    println!("{}", DESCRIPTION);
}
Jan 5, 2023


[+] click to leave a comment [+]
the comment system on this blog works via email. The button
below will generate a mailto: link based on this page's url 
and invoke your email client - please edit the comment there!

[optional] even better, encrypt the email with my public key

- don't modify the subject field
- specify a nickname, otherwise your comment will be shown as   
  anonymous
- your email address will not be disclosed
- you agree that the comment is to be made public.
- to take down a comment, send the request via email.

>> SEND COMMENT <<




Voice? via Blog on luis.zip January 12, 2024

Who is the voice inside my head? I have a voice in my mind. I’m hearing it now. It dictates what I write. Sometimes when I think about something, it speaks to me as if it were not me, as if it were not a product of the imagination that belongs to my domain…

2023 in Books via Wesley's Notebook January 7, 2024

recently ~ august23 via Sindre Kjelsrud September 5, 2023

what i've been doing during the month of august.

Generated by openring from webring