summaryrefslogtreecommitdiff
path: root/rustlings/exercises/10_modules
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-09-14 17:15:13 -0500
committerHunter Kvalevog <hunter@kvog.sh>2026-09-14 17:28:26 -0500
commitbf66df1a16461ef1ee50510803a3097914ffcb82 (patch)
tree15a13e34a794ec182c1e4c4507645ac43e07c6bc /rustlings/exercises/10_modules
parentb6245506460bd854ab32b1b6d2ecc51f5be82ef9 (diff)
Add rustlings
Diffstat (limited to 'rustlings/exercises/10_modules')
-rw-r--r--rustlings/exercises/10_modules/README.md7
-rw-r--r--rustlings/exercises/10_modules/modules1.rs16
-rw-r--r--rustlings/exercises/10_modules/modules2.rs26
-rw-r--r--rustlings/exercises/10_modules/modules3.rs13
4 files changed, 62 insertions, 0 deletions
diff --git a/rustlings/exercises/10_modules/README.md b/rustlings/exercises/10_modules/README.md
new file mode 100644
index 0000000..3dc8a48
--- /dev/null
+++ b/rustlings/exercises/10_modules/README.md
@@ -0,0 +1,7 @@
+# Modules
+
+In this section we'll give you an introduction to Rust's module system.
+
+## Further information
+
+- [The Module System](https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html)
diff --git a/rustlings/exercises/10_modules/modules1.rs b/rustlings/exercises/10_modules/modules1.rs
new file mode 100644
index 0000000..d97ab23
--- /dev/null
+++ b/rustlings/exercises/10_modules/modules1.rs
@@ -0,0 +1,16 @@
+// TODO: Fix the compiler error about calling a private function.
+mod sausage_factory {
+ // Don't let anybody outside of this module see this!
+ fn get_secret_recipe() -> String {
+ String::from("Ginger")
+ }
+
+ fn make_sausage() {
+ get_secret_recipe();
+ println!("sausage!");
+ }
+}
+
+fn main() {
+ sausage_factory::make_sausage();
+}
diff --git a/rustlings/exercises/10_modules/modules2.rs b/rustlings/exercises/10_modules/modules2.rs
new file mode 100644
index 0000000..782a70e
--- /dev/null
+++ b/rustlings/exercises/10_modules/modules2.rs
@@ -0,0 +1,26 @@
+// You can bring module paths into scopes and provide new names for them with
+// the `use` and `as` keywords.
+
+mod delicious_snacks {
+ // TODO: Add the following two `use` statements after fixing them.
+ // use self::fruits::PEAR as ???;
+ // use self::veggies::CUCUMBER as ???;
+
+ mod fruits {
+ pub const PEAR: &str = "Pear";
+ pub const APPLE: &str = "Apple";
+ }
+
+ mod veggies {
+ pub const CUCUMBER: &str = "Cucumber";
+ pub const CARROT: &str = "Carrot";
+ }
+}
+
+fn main() {
+ println!(
+ "favorite snacks: {} and {}",
+ delicious_snacks::fruit,
+ delicious_snacks::veggie,
+ );
+}
diff --git a/rustlings/exercises/10_modules/modules3.rs b/rustlings/exercises/10_modules/modules3.rs
new file mode 100644
index 0000000..691608d
--- /dev/null
+++ b/rustlings/exercises/10_modules/modules3.rs
@@ -0,0 +1,13 @@
+// You can use the `use` keyword to bring module paths from modules from
+// anywhere and especially from the standard library into your scope.
+
+// TODO: Bring `SystemTime` and `UNIX_EPOCH` from the `std::time` module into
+// your scope. Bonus style points if you can do it with one line!
+// use ???;
+
+fn main() {
+ match SystemTime::now().duration_since(UNIX_EPOCH) {
+ Ok(n) => println!("1970-01-01 00:00:00 UTC was {} seconds ago!", n.as_secs()),
+ Err(_) => panic!("SystemTime before UNIX EPOCH!"),
+ }
+}