Jim's solutions and tests to the rust-cli-exercises!
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:
cago --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 running the tests, you can also 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!
cargo mutate
We recommend starting from the empty project in the rust-cli-exercises repo. 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 being solved and skills practiced.
If you get stuck and have the urge to go look at the example solution, wait! First take a peek at the Hint.md file in the project to see if that gets you past your blocker!
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...
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!
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! 🦀