pages | ||
src | ||
tests | ||
.gitignore | ||
build.rs | ||
Cargo.lock | ||
Cargo.toml | ||
README.md |
Cookin' with Rust
A practical guide to the Rust crate ecosystem.
Recipes
Byteorder
A note about error handling
Error handling in Rust is robust when done correctly, but in today's
Rust it requires a fair bit of boilerplate. Because of this one often
sees Rust examples filled with unwrap
calls instead of proper error
handling.
Since these recipes are intended to be reused as-is and encourage best practices, they set up error handling correctly, and when necessary to reduce boilerplate, they use the [error-chain] crate.
The code for this setup generally looks like:
#[macro_use]
extern crate error_chain;
mod errors {
error_chain! {
foreign_links {
Io(::std::io::Error);
}
}
}
use errors::*;
fn main() { run().unwrap() }
fn run() -> Result<()> {
use std::io::Write;
let ref mut stdout = ::std::io::stdout();
writeln!(stdout, "hello, world")?;
Ok(())
}
This is using the error_chain!
macro to define a custom Error
and Result
type, along with an automatic conversion from
the common ::std::io::Error
type. The automatic conversion
makes the ?
operator work
For more background on error handling in Rust, read this page of the Rust book and this blog post.
License
MIT/Apache-2.0