9 releases

Uses new Rust 2024

0.5.1 Sep 2, 2025
0.5.0 Dec 29, 2023
0.4.6 Feb 23, 2023
0.4.5 Aug 7, 2022
0.4.2 Oct 26, 2021

#207 in #arguments

Download history 1641/week @ 2025-08-13 3151/week @ 2025-08-20 4253/week @ 2025-08-27 5310/week @ 2025-09-03 5175/week @ 2025-09-10 5135/week @ 2025-09-17 4202/week @ 2025-09-24 4351/week @ 2025-10-01 3613/week @ 2025-10-08 4382/week @ 2025-10-15 4457/week @ 2025-10-22 6122/week @ 2025-10-29 4848/week @ 2025-11-05 4933/week @ 2025-11-12 6960/week @ 2025-11-19 6617/week @ 2025-11-26

23,875 downloads per month
Used in 12 crates (via result-like)

BSD-2-Clause-Views

42KB
804 lines

OptionLike and ResultLike

Install: https://crates.io/crates/result-like

Define your own Option-like and Result-like enum types. Avoid reimplementing the entire APIs of option and result for your own enums.

Option example

use result_like::OptionLike;

// Simple case with single argument name to use Some and None
#[derive(OptionLike)]
enum MyOption<T> {
    Some(T),
    None,
}

let v = MyOption::Some(1);
// every option utilities are possible including unwrap, map, and, or etc.
assert_eq!(v.unwrap(), 1);

// convertable to option
let opt = v.into_option();
assert_eq!(opt, Some(1));

// enum with custom names instead of Some and None
#[derive(OptionLike)]
enum Number {
    Value(i64),
    Nan,
}

let v = Number::Value(10);
assert_ne!(v, Number::Nan);

Result example in same way

use result_like::ResultLike;

// typical
#[derive(ResultLike)]
enum MyResult<T, E> {
    Ok(T),
    Err(E),
}

// value-only
#[derive(ResultLike)]
enum Trial {
    Success(String),
    Failure(String),
}

Dependencies

~170–570KB
~14K SLoC