diff --git a/.all-contributorsrc b/.all-contributorsrc index 8207a035..24832b42 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1,6 +1,6 @@ { "files": [ - "README.md" + "AUTHORS.md" ], "imageSize": 100, "commit": false, @@ -1092,6 +1092,33 @@ "contributions": [ "doc" ] + }, + { + "login": "x-hgg-x", + "name": "x-hgg-x", + "avatar_url": "https://avatars.githubusercontent.com/u/39058530?v=4", + "profile": "https://github.com/x-hgg-x", + "contributions": [ + "code" + ] + }, + { + "login": "KisaragiEffective", + "name": "Kisaragi", + "avatar_url": "https://avatars.githubusercontent.com/u/48310258?v=4", + "profile": "http://kisaragieffective.github.io", + "contributions": [ + "doc" + ] + }, + { + "login": "Kallu-A", + "name": "Lucas Aries", + "avatar_url": "https://avatars.githubusercontent.com/u/73198738?v=4", + "profile": "https://github.com/Kallu-A", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 8, diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 00000000..a7f29bb2 --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,172 @@ +## Authors + +This file lists the people that have contributed to this project. + +Excluded from this list are @carols10cents and @diannasoreil, the principal +authors. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Carol (Nichols || Goulding)

πŸ’» πŸ–‹

QuietMisdreavus

πŸ’» πŸ–‹

Robert M Lugg

πŸ–‹

Hynek Schlawack

πŸ’»

Katharina Fey

πŸ’»

lukabavdaz

πŸ’» πŸ–‹

Erik Vesteraas

πŸ’»

delet0r

πŸ’»

Shaun Bennett

πŸ’»

Andrew Bagshaw

πŸ’»

Kyle Isom

πŸ’»

Colin Pitrat

πŸ’»

Zac Anger

πŸ’»

Matthias Geier

πŸ’»

Chris Pearce

πŸ’»

Yvan Sraka

πŸ’»

Denys Smirnov

πŸ’»

eddyp

πŸ’»

Brian Kung

πŸ’» πŸ–‹

Russell

πŸ’»

Dan Wilhelm

πŸ“–

Jesse

πŸ’» πŸ–‹

Fredrik JambrΓ©n

πŸ’»

Pete McFarlane

πŸ–‹

nkanderson

πŸ’» πŸ–‹

Ajax M

πŸ“–

Dylan Nugent

πŸ–‹

vyaslav

πŸ’» πŸ–‹

George

πŸ’»

Thomas Holloway

πŸ’» πŸ–‹

Jubilee

πŸ’»

WofWca

πŸ’»

Roberto Vidal

πŸ’» πŸ“– πŸ€” 🚧

Jens

πŸ“–

Rahat Ahmed

πŸ“–

Abdou Seck

πŸ’» πŸ–‹ πŸ‘€

Katie

πŸ’»

Socrates

πŸ“–

gnodarse

πŸ–‹

Harrison Metzger

πŸ’»

Torben Jonas

πŸ’» πŸ–‹

Paul Bissex

πŸ“–

Steven Mann

πŸ’» πŸ–‹

Mario Reder

πŸ’» πŸ–‹

skim

πŸ’»

Sanjay K

πŸ’» πŸ–‹

Rohan Jain

πŸ’»

Said Aspen

πŸ’» πŸ–‹

Ufuk Celebi

πŸ’»

lebedevsergey

πŸ“–

Aleksei Trifonov

πŸ–‹

Darren Meehan

πŸ–‹

Jihchi Lee

πŸ–‹

Christofer Bertonha

πŸ–‹

Vivek Bharath Akupatni

πŸ’» ⚠️

DΓ­dac SementΓ© FernΓ‘ndez

πŸ’» πŸ–‹

Rob Story

πŸ’»

Siobhan Jacobson

πŸ’»

Evan Carroll

πŸ–‹

Jawaad Mahmood

πŸ–‹

Gaurang Tandon

πŸ–‹

Stefan Kupresak

πŸ–‹

Greg Leonard

πŸ–‹

Ryan McQuen

πŸ’»

Annika

πŸ‘€

Axel Viala

πŸ’»

Mohammed Sazid Al Rashid

πŸ–‹ πŸ’»

Caleb Webber

🚧

Peter N

🚧

seancad

🚧

Will Hayworth

πŸ–‹

Christian Zeller

πŸ–‹

Jean-Francois Chevrette

πŸ–‹ πŸ’»

John Baber-Lucero

πŸ–‹

Tal

πŸ–‹

apogeeoak

πŸ–‹ πŸ’»

Larry Garfield

πŸ–‹

circumspect

πŸ–‹

Cyrus Wyett

πŸ–‹

cadolphs

πŸ’»

Pascal H.

πŸ–‹

Rod Elias

πŸ–‹

Matt Lebl

πŸ’»

Ignacio Le Fluk

πŸ–‹

Taylor Yu

πŸ’» πŸ–‹

Patrick Hintermayer

πŸ’»

Pete Pavlovski

πŸ–‹

k12ish

πŸ–‹

Shao Yang Hong

πŸ–‹

Brandon Macer

πŸ–‹

Stoian Dan

πŸ–‹

Pi Delport

πŸ–‹

Sateesh

πŸ’» πŸ–‹

ZC

πŸ–‹

hyperparabolic

πŸ’»

arlecchino

πŸ“–

Richthofen

πŸ’»

Ivan Nerazumov

πŸ“–

lauralindzey

πŸ“–

Rakshit Sinha

πŸ–‹

Damian

πŸ–‹

Ben Armstead

πŸ’»

anuk909

πŸ–‹ πŸ’»

granddaifuku

πŸ–‹

Weilet

πŸ–‹

LIU JIE

πŸ–‹

Antoine BΓΌsch

πŸ’»

frogtd

πŸ–‹

Zhenghao Lu

πŸ–‹

Fredrik Enestad

πŸ–‹

xuesong

πŸ–‹

Michael Walsh

πŸ’»

alirezaghey

πŸ–‹

Franklin van Nes

πŸ’»

nekonako

πŸ’»

ZX

πŸ–‹

Yang Wen

πŸ–‹

Brandon High

πŸ“–

x-hgg-x

πŸ’»

Kisaragi

πŸ“–

Lucas Aries

πŸ–‹
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! diff --git a/Cargo.toml b/Cargo.toml index 30032695..4761c9a4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ console = "0.7.7" notify = "4.0.15" toml = "0.4.10" regex = "1.1.6" -serde = {version = "1.0.10", features = ["derive"]} +serde = { version = "1.0.10", features = ["derive"] } [[bin]] name = "rustlings" @@ -21,3 +21,6 @@ path = "src/main.rs" assert_cmd = "0.11.0" predicates = "1.0.1" glob = "0.3.0" + +[features] +exercises = [] diff --git a/README.md b/README.md index c9bb8b87..babc3423 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ - -[![All Contributors](https://img.shields.io/badge/all_contributors-118-orange.svg?style=flat-square)](#contributors-) - - # rustlings πŸ¦€β€οΈ Greetings and welcome to `rustlings`. This project contains small exercises to get you used to reading and writing Rust code. This includes reading and responding to compiler messages! @@ -36,13 +32,13 @@ This will install Rustlings and give you access to the `rustlings` command. Run In PowerShell (Run as Administrator), set `ExecutionPolicy` to `RemoteSigned`: -```ps +```ps1 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser ``` Then, you can run: -```ps +```ps1 Start-BitsTransfer -Source https://git.io/JTL5v -Destination $env:TMP/install_rustlings.ps1; Unblock-File $env:TMP/install_rustlings.ps1; Invoke-Expression $env:TMP/install_rustlings.ps1 ``` @@ -68,6 +64,7 @@ cargo install --force --path . ``` If there are installation errors, ensure that your toolchain is up to date. For the latest, run: + ```bash rustup update ``` @@ -107,17 +104,18 @@ rustlings run next In case you get stuck, you can run the following command to get a hint for your exercise: -``` bash +```bash rustlings hint myExercise1 ``` You can also get the hint for the next unsolved exercise with the following command: -``` bash +```bash rustlings hint next ``` To check your progress, you can run the following command: + ```bash rustlings list ``` @@ -135,14 +133,14 @@ Once you've completed Rustlings, put your new knowledge to good use! Continue pr If you want to remove Rustlings from your system, there's two steps. First, you'll need to remove the exercises folder that the install script created for you: -``` bash +```bash rm -rf rustlings # or your custom folder name, if you chose and or renamed it ``` Second, since Rustlings got installed via `cargo install`, it's only reasonable to assume that you can also remove it using Cargo, and exactly that is the case. Run `cargo uninstall` to remove the `rustlings` binary: -``` bash +```bash cargo uninstall rustlings ``` @@ -172,165 +170,4 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md). ## Contributors ✨ -Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Carol (Nichols || Goulding)

πŸ’» πŸ–‹

QuietMisdreavus

πŸ’» πŸ–‹

Robert M Lugg

πŸ–‹

Hynek Schlawack

πŸ’»

Katharina Fey

πŸ’»

lukabavdaz

πŸ’» πŸ–‹

Erik Vesteraas

πŸ’»

delet0r

πŸ’»

Shaun Bennett

πŸ’»

Andrew Bagshaw

πŸ’»

Kyle Isom

πŸ’»

Colin Pitrat

πŸ’»

Zac Anger

πŸ’»

Matthias Geier

πŸ’»

Chris Pearce

πŸ’»

Yvan Sraka

πŸ’»

Denys Smirnov

πŸ’»

eddyp

πŸ’»

Brian Kung

πŸ’» πŸ–‹

Russell

πŸ’»

Dan Wilhelm

πŸ“–

Jesse

πŸ’» πŸ–‹

Fredrik JambrΓ©n

πŸ’»

Pete McFarlane

πŸ–‹

nkanderson

πŸ’» πŸ–‹

Ajax M

πŸ“–

Dylan Nugent

πŸ–‹

vyaslav

πŸ’» πŸ–‹

George

πŸ’»

Thomas Holloway

πŸ’» πŸ–‹

Jubilee

πŸ’»

WofWca

πŸ’»

Roberto Vidal

πŸ’» πŸ“– πŸ€” 🚧

Jens

πŸ“–

Rahat Ahmed

πŸ“–

Abdou Seck

πŸ’» πŸ–‹ πŸ‘€

Katie

πŸ’»

Socrates

πŸ“–

gnodarse

πŸ–‹

Harrison Metzger

πŸ’»

Torben Jonas

πŸ’» πŸ–‹

Paul Bissex

πŸ“–

Steven Mann

πŸ’» πŸ–‹

Mario Reder

πŸ’» πŸ–‹

skim

πŸ’»

Sanjay K

πŸ’» πŸ–‹

Rohan Jain

πŸ’»

Said Aspen

πŸ’» πŸ–‹

Ufuk Celebi

πŸ’»

lebedevsergey

πŸ“–

Aleksei Trifonov

πŸ–‹

Darren Meehan

πŸ–‹

Jihchi Lee

πŸ–‹

Christofer Bertonha

πŸ–‹

Vivek Bharath Akupatni

πŸ’» ⚠️

DΓ­dac SementΓ© FernΓ‘ndez

πŸ’» πŸ–‹

Rob Story

πŸ’»

Siobhan Jacobson

πŸ’»

Evan Carroll

πŸ–‹

Jawaad Mahmood

πŸ–‹

Gaurang Tandon

πŸ–‹

Stefan Kupresak

πŸ–‹

Greg Leonard

πŸ–‹

Ryan McQuen

πŸ’»

Annika

πŸ‘€

Axel Viala

πŸ’»

Mohammed Sazid Al Rashid

πŸ–‹ πŸ’»

Caleb Webber

🚧

Peter N

🚧

seancad

🚧

Will Hayworth

πŸ–‹

Christian Zeller

πŸ–‹

Jean-Francois Chevrette

πŸ–‹ πŸ’»

John Baber-Lucero

πŸ–‹

Tal

πŸ–‹

apogeeoak

πŸ–‹ πŸ’»

Larry Garfield

πŸ–‹

circumspect

πŸ–‹

Cyrus Wyett

πŸ–‹

cadolphs

πŸ’»

Pascal H.

πŸ–‹

Rod Elias

πŸ–‹

Matt Lebl

πŸ’»

Ignacio Le Fluk

πŸ–‹

Taylor Yu

πŸ’» πŸ–‹

Patrick Hintermayer

πŸ’»

Pete Pavlovski

πŸ–‹

k12ish

πŸ–‹

Shao Yang Hong

πŸ–‹

Brandon Macer

πŸ–‹

Stoian Dan

πŸ–‹

Pi Delport

πŸ–‹

Sateesh

πŸ’» πŸ–‹

ZC

πŸ–‹

hyperparabolic

πŸ’»

arlecchino

πŸ“–

Richthofen

πŸ’»

Ivan Nerazumov

πŸ“–

lauralindzey

πŸ“–

Rakshit Sinha

πŸ–‹

Damian

πŸ–‹

Ben Armstead

πŸ’»

anuk909

πŸ–‹ πŸ’»

granddaifuku

πŸ–‹

Weilet

πŸ–‹

LIU JIE

πŸ–‹

Antoine BΓΌsch

πŸ’»

frogtd

πŸ–‹

Zhenghao Lu

πŸ–‹

Fredrik Enestad

πŸ–‹

xuesong

πŸ–‹

Michael Walsh

πŸ’»

alirezaghey

πŸ–‹

Franklin van Nes

πŸ’»

nekonako

πŸ’»

ZX

πŸ–‹

Yang Wen

πŸ–‹

Brandon High

πŸ“–
- - - - - - -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! +Thanks goes to the wonderful people listed in [AUTHORS.md](./AUTHORS.md) πŸŽ‰ diff --git a/exercises/advanced_errors/mod.rs b/exercises/advanced_errors/mod.rs new file mode 100644 index 00000000..e33fb80d --- /dev/null +++ b/exercises/advanced_errors/mod.rs @@ -0,0 +1,2 @@ +mod advanced_errs1; +mod advanced_errs2; diff --git a/exercises/clippy/mod.rs b/exercises/clippy/mod.rs new file mode 100644 index 00000000..689dc95f --- /dev/null +++ b/exercises/clippy/mod.rs @@ -0,0 +1,2 @@ +mod clippy1; +mod clippy2; diff --git a/exercises/collections/mod.rs b/exercises/collections/mod.rs new file mode 100644 index 00000000..f46c1424 --- /dev/null +++ b/exercises/collections/mod.rs @@ -0,0 +1,4 @@ +mod hashmap1; +mod hashmap2; +mod vec1; +mod vec2; diff --git a/exercises/conversions/mod.rs b/exercises/conversions/mod.rs new file mode 100644 index 00000000..69f66ae4 --- /dev/null +++ b/exercises/conversions/mod.rs @@ -0,0 +1,5 @@ +mod as_ref_mut; +mod from_into; +mod from_str; +mod try_from_into; +mod using_as; diff --git a/exercises/enums/mod.rs b/exercises/enums/mod.rs new file mode 100644 index 00000000..a23fd6e5 --- /dev/null +++ b/exercises/enums/mod.rs @@ -0,0 +1,3 @@ +mod enums1; +mod enums2; +mod enums3; diff --git a/exercises/error_handling/mod.rs b/exercises/error_handling/mod.rs new file mode 100644 index 00000000..539fa23d --- /dev/null +++ b/exercises/error_handling/mod.rs @@ -0,0 +1,6 @@ +mod errors1; +mod errors2; +mod errors3; +mod errors4; +mod errors5; +mod errors6; diff --git a/exercises/functions/mod.rs b/exercises/functions/mod.rs new file mode 100644 index 00000000..445b6f58 --- /dev/null +++ b/exercises/functions/mod.rs @@ -0,0 +1,5 @@ +mod functions1; +mod functions2; +mod functions3; +mod functions4; +mod functions5; diff --git a/exercises/generics/mod.rs b/exercises/generics/mod.rs new file mode 100644 index 00000000..5b93555c --- /dev/null +++ b/exercises/generics/mod.rs @@ -0,0 +1,3 @@ +mod generics1; +mod generics2; +mod generics3; diff --git a/exercises/if/mod.rs b/exercises/if/mod.rs new file mode 100644 index 00000000..c5d02445 --- /dev/null +++ b/exercises/if/mod.rs @@ -0,0 +1,2 @@ +mod if1; +mod if2; diff --git a/exercises/intro/mod.rs b/exercises/intro/mod.rs new file mode 100644 index 00000000..445c47ab --- /dev/null +++ b/exercises/intro/mod.rs @@ -0,0 +1,2 @@ +mod intro1; +mod intro2; diff --git a/exercises/macros/mod.rs b/exercises/macros/mod.rs new file mode 100644 index 00000000..9f65acf5 --- /dev/null +++ b/exercises/macros/mod.rs @@ -0,0 +1,4 @@ +mod macros1; +mod macros2; +mod macros3; +mod macros4; diff --git a/exercises/mod.rs b/exercises/mod.rs new file mode 100644 index 00000000..6a143b56 --- /dev/null +++ b/exercises/mod.rs @@ -0,0 +1,26 @@ +mod advanced_errors; +mod clippy; +mod collections; +mod conversions; +mod enums; +mod error_handling; +mod functions; +mod generics; +mod r#if; +mod intro; +mod macros; +mod modules; +mod move_semantics; +mod option; +mod primitive_types; +mod quiz1; +mod quiz2; +mod quiz3; +mod quiz4; +mod standard_library_types; +mod strings; +mod structs; +mod tests; +mod threads; +mod traits; +mod variables; diff --git a/exercises/modules/mod.rs b/exercises/modules/mod.rs new file mode 100644 index 00000000..35f96af5 --- /dev/null +++ b/exercises/modules/mod.rs @@ -0,0 +1,3 @@ +mod modules1; +mod modules2; +mod modules3; diff --git a/exercises/move_semantics/mod.rs b/exercises/move_semantics/mod.rs new file mode 100644 index 00000000..c9e61b36 --- /dev/null +++ b/exercises/move_semantics/mod.rs @@ -0,0 +1,5 @@ +mod move_semantics1; +mod move_semantics2; +mod move_semantics3; +mod move_semantics4; +mod move_semantics5; diff --git a/exercises/move_semantics/move_semantics6.rs b/exercises/move_semantics/move_semantics6.rs new file mode 100644 index 00000000..457e7ae7 --- /dev/null +++ b/exercises/move_semantics/move_semantics6.rs @@ -0,0 +1,25 @@ +// move_semantics6.rs +// Make me compile! `rustlings hint move_semantics6` for hints +// You can't change anything except adding or removing references + +// I AM NOT DONE + +fn main() { + let data = "Rust is great!".to_string(); + + get_char(data); + + string_uppercase(&data); +} + +// Should not take ownership +fn get_char(data: String) -> char { + data.chars().last().unwrap() +} + +// Should take ownership +fn string_uppercase(mut data: &String) { + data = &data.to_uppercase(); + + println!("{}", data); +} diff --git a/exercises/option/mod.rs b/exercises/option/mod.rs new file mode 100644 index 00000000..b3cdb13d --- /dev/null +++ b/exercises/option/mod.rs @@ -0,0 +1,3 @@ +mod option1; +mod option2; +mod option3; diff --git a/exercises/primitive_types/mod.rs b/exercises/primitive_types/mod.rs new file mode 100644 index 00000000..23355239 --- /dev/null +++ b/exercises/primitive_types/mod.rs @@ -0,0 +1,6 @@ +mod primitive_types1; +mod primitive_types2; +mod primitive_types3; +mod primitive_types4; +mod primitive_types5; +mod primitive_types6; diff --git a/exercises/standard_library_types/mod.rs b/exercises/standard_library_types/mod.rs new file mode 100644 index 00000000..b03acb92 --- /dev/null +++ b/exercises/standard_library_types/mod.rs @@ -0,0 +1,7 @@ +mod arc1; +mod box1; +mod iterators1; +mod iterators2; +mod iterators3; +mod iterators4; +mod iterators5; diff --git a/exercises/strings/mod.rs b/exercises/strings/mod.rs new file mode 100644 index 00000000..b1b460bc --- /dev/null +++ b/exercises/strings/mod.rs @@ -0,0 +1,2 @@ +mod strings1; +mod strings2; diff --git a/exercises/structs/mod.rs b/exercises/structs/mod.rs new file mode 100644 index 00000000..214fed16 --- /dev/null +++ b/exercises/structs/mod.rs @@ -0,0 +1,3 @@ +mod structs1; +mod structs2; +mod structs3; diff --git a/exercises/tests/mod.rs b/exercises/tests/mod.rs new file mode 100644 index 00000000..489541be --- /dev/null +++ b/exercises/tests/mod.rs @@ -0,0 +1,3 @@ +mod tests1; +mod tests2; +mod tests3; diff --git a/exercises/threads/mod.rs b/exercises/threads/mod.rs new file mode 100644 index 00000000..24d54007 --- /dev/null +++ b/exercises/threads/mod.rs @@ -0,0 +1 @@ +mod threads1; diff --git a/exercises/traits/mod.rs b/exercises/traits/mod.rs new file mode 100644 index 00000000..6f0a9c3f --- /dev/null +++ b/exercises/traits/mod.rs @@ -0,0 +1,2 @@ +mod traits1; +mod traits2; diff --git a/exercises/variables/mod.rs b/exercises/variables/mod.rs new file mode 100644 index 00000000..a25f477e --- /dev/null +++ b/exercises/variables/mod.rs @@ -0,0 +1,6 @@ +mod variables1; +mod variables2; +mod variables3; +mod variables4; +mod variables5; +mod variables6; diff --git a/info.toml b/info.toml index ced06b02..1c5fcc83 100644 --- a/info.toml +++ b/info.toml @@ -237,6 +237,21 @@ in the book's section References and Borrowing': https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#mutable-references. """ +[[exercises]] +name = "move_semantics6" +path = "exercises/move_semantics/move_semantics6.rs" +mode = "compile" +hint = """ +To find the answer, you can consult the book section "References and Borrowing": +https://doc.rust-lang.org/stable/book/ch04-02-references-and-borrowing.html +The first problem is that `get_char` is taking ownership of the string. +So `data` is moved and can't be used for `string_uppercase` +`data` is moved to `get_char` first, meaning that `string_uppercase` cannot manipulate the data. +Once you've fixed that, `string_uppercase`'s function signature will also need to be adjusted. +Can you figure out how? + +Another hint: it has to do with the `&` character.""" + # PRIMITIVE TYPES [[exercises]] diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 00000000..82c1e7e4 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,3 @@ +#[cfg(feature = "exercises")] +#[path = "../exercises/mod.rs"] +mod exercises;