You can also use a nested pattern:

match reader.read(buf) {
    Ok(cnt) => { /* stuff */ }
    Err(IoError { kind: EndOfFile, .. } => { /* eof stuff */ }
    Err(e) => return Err(e)
}

Steven Fackler


On Mon, Feb 3, 2014 at 10:32 PM, Alex Crichton <a...@crichton.co> wrote:

> I'd recommend one of two solutions, one is a match guard:
>
>     match reader.read(buf) {
>         Ok(cnt) => { /* ... */ }
>         Err(ref e) if e.kind == io::EndOfFile => { /* ... */ }
>         Err(e) => return Err(e)
>     }
>
> and the other would be to home-grow your own macro if you find
> yourself writing the same pattern frequently.
>
> On Mon, Feb 3, 2014 at 7:25 PM, Palmer Cox <palmer...@gmail.com> wrote:
> > I like this change quite a bit. However, is there a more succinct way
> than
> > the following to take an action on EOF:
> >
> > match reader.read(buff) {
> >     Ok(cnt) => {
> >         // Do something
> >     }
> >     Err(io_error) => match io_error.kind {
> >         EndOfFile => {
> >             // Do something for EOF
> >         }
> >         _ => return Err(io_error)
> >     }
> > }
> >
> > -Palmer Cox
> >
> >
> >
> > On Mon, Feb 3, 2014 at 9:19 PM, Alex Crichton <a...@crichton.co> wrote:
> >>
> >> > By returning a Result from all function calls, it's not much cleaner
> >> > to handle errors
> >>
> >> Oops, wrong word there, I meant to indicate that it *is* much cleaner
> >> to handle errors with Result rather than conditions.
> >> _______________________________________________
> >> Rust-dev mailing list
> >> Rust-dev@mozilla.org
> >> https://mail.mozilla.org/listinfo/rust-dev
> >
> >
> _______________________________________________
> Rust-dev mailing list
> Rust-dev@mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev
>
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to