Little exercises for learning Rust and building awesome cli tools! ⭐️
This repo is a collection of many extremely small Rust projects.
This idea is to break down otherwise scary Rust code into small, approachable, and easily testable little functions.
Each folder in the root directory contains a completely independent Rust project meant to be run with cargo
, which can be installed via rustup.
First ensure you have rust and cargo installed:
cargo --version
You can then navigate into each project folder and run the cli tool:
cargo run
You can also run the automated tests:
cargo test
Note: This runs both unit tests and integration tests!
In addition to just running the tests, you can check code coverage:
cargo tarpaulin --out Html
Then view the tarpaulin-report.html
file in a browser.
You can also run mutation tests to test your tests using libraries such as cargo-mutants!
The numbers prefixing each folder are meant to be a recommended path to following in exploring these projects, but feel free to jump around as they are completely independent of each other!
Each project has a README that explains the problem to be solved and skills practiced.
Each exercise will have a README.md file in the root of the project with these sections:
- Name for the project with a little one sentence blurb.
- An imaginary real world situation where this code could be useful.
- The goal / success criteria of what you need to build.
- Some suggestions around what unit and integration tests to write.
- Specific "toolbox" skills used to complete the exercise.
- Some ideas for how to take the exercise further and expand on it.
- Located in a Hints.md file, these are meant to get you going in the right direction without completely giving away the solution.
By building little Rust applications like these you are documenting how to accomplish and test different things you might want a command line utility to do.
If you starting building your own portfolio of Rust cli tools then one day when you actually want to solve some business problem with Rust you won't be starting from scratch and can use some of your old code and/or experiences to help you!
There are just a few reasons why Rust makes an excellent language for writing command line utilities:
-
Often times there is a delay on startup and during heavy processing for languages with a garbage collector.
Since Rust CLI programs do not have to boot up a vm or gc they can extremely fast, thus saving developer time, energy, and happiness in addition to company dollars!
-
The borrowing, lifetimes, and
mut
keyword gives the programmer very fine control over memory usage -
Cargo makes it very easy to build and deploy cli tools, and not just to cargo- you can also publish your super efficient binary to other package managers like npm!
-
Once you get the hang of it you may find that you actually really enjoy working on projects in Rust. There is a reason why it is voted the "Most Loved Programming Language" on the Stack Overflow survey every year!
If you really get stuck and want to see Jim's solutions, see the rust-cli-examples repo.
It is highly recommended to work through them on your own because by just reading the final code you are missing out on seeing all the compiler and linter errors along the way that led the code to end up this way...
Have a cool little cli tool you want to show off to others? Feel free to add a pull request! Also, feel free to open an issue just to discuss before hand or if you have any questions about the code / projects here.
Feel free to copy, modify, or distribute this code for your own personal or commercial use. Use at your own risk!
Thanks for stopping by! 🦀