Rust code may have a plethora of representations of errors, but the standard library has
a universal trait std::error::Error
for describing errors.
Using a smart pointer Box
we can use the type Box<dyn std::error::Error>
as a common type for returning errors because it allows us to
propagate up an error on the heap and interact with it at a high level without having to know a specific type.
Early in Tour of Rust we learned that main
can return an error. We can now return
a type capable of describing almost any kind of error that might occur in our program
so long as the error's data structure implements Rust's common Error
trait.
fn main() -> Result<(), Box<dyn std::error:Error>>