Rust modules: Difference between revisions

From wikinotes
No edit summary
Line 10: Line 10:
|}
|}
</blockquote><!-- Documentation -->
</blockquote><!-- Documentation -->
= Scrap =
<blockquote>
Let's just understand this all first
== sample-1 ==
<blockquote>
<syntaxhighlight lang="bash">
src/
  main.rs
  house.rs
</syntaxhighlight>
<syntaxhighlight lang="rust">
// main.rs
mod house;
fn main() {
    println!("{}", house::house_name());
}
</syntaxhighlight>
<syntaxhighlight lang="rust">
// house.rs
pub fn house_name() -> String {
    String:from("hi")
}
</syntaxhighlight>
</blockquote><!-- sample-1 -->
</blockquote><!-- Scrap -->


= Entrypoint =
= Entrypoint =

Revision as of 03:15, 8 February 2023

Modules are rust libraries.
The std::prelude module is included in the scope of every program.

Documentation

cargo book: package layout https://doc.rust-lang.org/cargo/guide/project-layout.html

Scrap

Let's just understand this all first

sample-1

src/
  main.rs
  house.rs
// main.rs

mod house;

fn main() {
    println!("{}", house::house_name());
}
// house.rs

pub fn house_name() -> String {
    String:from("hi")
}

Entrypoint

For modules to be compiled, they must be used (however indirectly)
from either your crate's main.rs or lib.rs.

Naming/Paths

Module names govern where they can be found within the filesystem.
Module locations are based on where they are defined

# from the rust book:
backyard
├── Cargo.lock
├── Cargo.toml
└── src
    ├── garden
    │   └── vegetables.rs
    ├── garden.rs
    └── main.rs

The module foo's code could be

  • src/foo.rs
  • src/foo/mod.rs

Imports

  • use merge namespace into current (ex. use foo; myfn();)
  • mod enables you to access from namespace (ex. mod foo; foo::myfn();)

use (merge with current namespace)

use std::io;                      // merges objects from namespace into your own
use std::io::*;                   //
use std::fs::File;                // import 'File' only into current namespace
use std::fs::{File, DirBuilder};  // import multiple types/functions into current namespace

std::io::stdin()                  // you also can access objects directly from their namespace without `use`

mod (access namespace)

Access Control

By default, a module's code is public to itself and it's children,
but private to it's parents and/or callers.

pub mod house {
    pub mod livingroom {
        // ...
    }
    mod bedroom {
        // ...
    }
}