No description
Find a file
2017-02-25 01:32:03 -06:00
pages Set up pages 2017-02-25 00:38:58 -06:00
src Initial 2017-02-20 11:22:19 -08:00
tests Initial 2017-02-20 11:22:19 -08:00
.gitignore Set up pages 2017-02-25 00:38:58 -06:00
build.rs Initial 2017-02-20 11:22:19 -08:00
Cargo.lock Fix all the breakage 2017-02-24 21:21:08 -08:00
Cargo.toml . 2017-02-23 12:29:46 -08:00
README.md Add error-chain links and slightly improve formatting 2017-02-25 01:32:03 -06:00

Cookin' with Rust

A practical guide to the Rust crate ecosystem.

Recipes

Byteorder 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