In this chapter, we learned all kinds of techniques to make our code more flexible, using higher-order functions, closures, iterators, and generic types and functions. We then reviewed the basic error-handling mechanisms, which make good use of generic types.
In the following chapter, we will expose the object-oriented nature of Rust, by defining methods on structs and implementing traits.