This page is a general getting started in rust.
my_project/ src/ my_submodule/ mod.rs # my_submodule's code foobar.rs # my_submodule::foobar's code main.rs # executable entrypoint && tests lib.rs # library entrypoint && tests tests/ *.rs # integration tests Cargo.toml Cargo.lock
A rust project comprises of
workspaces (optional) a set of packages sharing a Cargo.toml packages build/test/share a collection of crates crates tree of modules that build a single library, or executable modules organize scope/privacy of paths paths rust files
A package is a collection of crates.
- it may have multiple executable crates
- it may only have one library cratemyproject/ src/ Cargo.toml Cargo.lock
[package] name = "my_project" version = "0.1.0" authors = ["Your Name <email@example.com>"] edition = "2018" [dependencies] time = "0.1.12" regex = "0.1.41"
cargo new my_project # generate a new project
A crate is a build target for rust.
It can be either a library or an executable.
If a package only has a single library/executable, the crate type can be implied from the source files.src/lib.rs # if this exists, crate is a library src/main.rs # if this exists, crate is an executable
You can also specify multiple crates for your package in
Cargo.toml.# Cargo.toml [package] # ... [[bin]] name = "foo" # refers to src/bin/foo.rs [[bin]] name = "bar" # refers to src/bin/bar.rs [lib] # <-- single '['s # refers to 'src/lib.rs', unless 'path' overrides it
Modules contain groups of related srcfiles.
modules are private to their parents by default, and public to their child modules.
the name/namespace of the module mirrors it's filesystem location.
usekeyword can merge a module or one of it's elements into the current namespace.
See more details in rust modules.