#parser #v #lazy-evaluation #docs #parse

oops

Lightweight error-handling. Provides Option<T> -> std::io::Result<T>.

2 unstable releases

0.2.0 Jan 3, 2021
0.1.0 Feb 15, 2020

#2266 in Rust patterns

Download history 58/week @ 2023-10-29 66/week @ 2023-11-05 49/week @ 2023-11-12 49/week @ 2023-11-19 49/week @ 2023-11-26 43/week @ 2023-12-03 36/week @ 2023-12-10 51/week @ 2023-12-17 47/week @ 2023-12-24 28/week @ 2023-12-31 54/week @ 2024-01-07 49/week @ 2024-01-14 41/week @ 2024-01-21 30/week @ 2024-01-28 34/week @ 2024-02-04 64/week @ 2024-02-11

177 downloads per month
Used in 5 crates

MIT/Apache

6KB
90 lines

Lightweight error-handling for transforming values into std::io::Result. Provides:

  • Option<T>::oops(self, &str) -> std::io::Result<T>
  • Result<T, E>::oops(self, &str) -> std::io::Result<T>
  • Option<T>::lazy_oops(self, FnOnce() -> String) -> std::io::Result<T>
  • Resukt<T, E>::lazy_oops(self, FnOnce() -> String) -> std::io::Result<T>

Examples

use std::io::Result;

fn third_element(slice: &[usize]) -> Result<&usize> {
    // Using oops to add context to a None
    slice.iter().nth(3).oops("No third element")
}

fn parse_batch(slice: &[&str]) -> Result<Vec<usize>> {
    slice
        .iter()
        .map(|v| {
            v
                .parse::<usize>()

                // Using lazy_oops to add debug messages
                .lazy_oops(|| format!("Failed to parse {} from {:?}", v, slice))
        })
        .collect()
}

assert_eq!(
    // No third element
    third_element(&[1, 2, 3]).err().unwrap().kind(),
    std::io::ErrorKind::Other
);

assert_eq!(
    // Failed to parse lo from ["2", "3", "7", "lo", "11"]
    parse_batch(&["2", "3", "7", "lo", "11"]).err().unwrap().kind(),
    std::io::ErrorKind::Other
);

No runtime deps