Rust anatomy: Difference between revisions
From wikinotes
(→Crates) |
No edit summary |
||
Line 1: | Line 1: | ||
= Filesystem = | |||
<blockquote> | |||
<syntaxhighlight lang="bash"> | |||
my_project/ | |||
src/ | |||
submodule/ | |||
mod.rs # submodule's code | |||
foobar.rs # a sub-submodule | |||
main.rs # executable entrypoint && tests | |||
lib.rs # library entrypoint && tests | |||
tests/ | |||
*.rs # integration tests | |||
Cargo.toml | |||
Cargo.lock | |||
</syntaxhighlight> | |||
</blockquote><!-- Filesystem --> | |||
= Examples = | |||
<blockquote> | |||
== Commandline Executable == | |||
<blockquote> | |||
TODO | |||
</blockquote><!-- Commandline Executable --> | |||
</blockquote><!-- Examples --> | |||
= Project Components = | = Project Components = |
Revision as of 00:42, 9 February 2023
Filesystem
my_project/ src/ submodule/ mod.rs # submodule's code foobar.rs # a sub-submodule main.rs # executable entrypoint && tests lib.rs # library entrypoint && tests tests/ *.rs # integration tests Cargo.toml Cargo.lock
Examples
Commandline Executable
TODO
Project Components
A rust project comprises of
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 files ? Packages
A package is a collection of crates.
- it may have multiple executable crates
- it may only have one library crate
myproject/ src/ Cargo.toml Cargo.lockCrates
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 executableYou 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 itModules
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.
theuse
keyword can merge a module or one of it's elements into the current namespace.See more details in rust modules.