A simple version of the classic command line tool grep.
- accepting command line arguments.
- reading a file.
- refactoring to improve modularity and error handling.
- developing the library’s functionality with Test-Driven Development (TDD).
- working with environment variables.
- writing error messages to standard error instead of standard output.
- using closures and iterators.
Based on The Rust Programming Language by Steve Klabnik and Carol Nichols (2021).