1. error chain is not the recommended way, despite being in the book. It needs updating!
2. The error trait in the std has come a long way since the book was originally written
3. You still might want some nicities that that Box<dun Error> doesn't provide you, and so you'd define an enum. You can do it manually, or use a library like anyhow or thiserror depending on if you're an app or library.
4. Rust error handling has been in a lot of flux, but generally improving. It probably does deserve a dedicated section in the book.
I recommend this blog post: https://nick.groenen.me/posts/rust-error-handling/