Traits and generics are a key feature for development and Rust is feature-rich for these. We have seen how to create implementations, how to use generics, how to ensure that the types can be bound, and the power of traits. Hopefully, you should be appreciating now the sheer power that generics provide to the developer in terms of flexibility. Generics also allow for reducing the amount of code we (as developers) have to write by essentially removing the need to worry too much about what the generic represents.
In the next chapter, we will be looking at extending our Rust applications by the use of external libraries, known as crates.