Option Utilities

Extension methods for working with Option types more ergonomically

rust (1.70) 2025-11-12 option utility functional error-handling

Description

A collection of utility functions and extension traits for working with Rust’s Option<T> type. Provides common patterns like fallback values, transformations, and error handling.

Features

  • Fallback value chains
  • Transform and filter operations
  • Error conversion
  • Conditional execution

Code

RAW
pub trait OptionExt<T> {    fn or_else_lazy<F>(self, f: F) -> Option<T>    where        F: FnOnce() -> Option<T>;        fn map_or_default<U: Default>(self, f: impl FnOnce(T) -> U) -> U;        fn filter_map<U>(self, f: impl FnOnce(T) -> Option<U>) -> Option<U>;}impl<T> OptionExt<T> for Option<T> {    fn or_else_lazy<F>(self, f: F) -> Option<T>    where        F: FnOnce() -> Option<T>,    {        self.or_else(f)    }        fn map_or_default<U: Default>(self, f: impl FnOnce(T) -> U) -> U {        self.map_or_else(|| U::default(), f)    }        fn filter_map<U>(self, f: impl FnOnce(T) -> Option<U>) -> Option<U> {        self.and_then(f)    }}pub fn unwrap_or_default<T: Default>(opt: Option<T>) -> T {    opt.unwrap_or_else(|| T::default())}pub fn option_to_result<T, E>(opt: Option<T>, err: E) -> Result<T, E> {    opt.ok_or(err)}
RAW
use option_utils::{OptionExt, unwrap_or_default, option_to_result};let value: Option<i32> = Some(42);// Use extension methodslet result = value    .map_or_default(|v| v * 2)    .filter_map(|v| if v > 50 { Some(v) } else { None });// Convert to Resultlet res: Result<i32, &str> = option_to_result(value, "No value");// Default fallbacklet defaulted = unwrap_or_default(value);

Comments

No comments yet. Be the first to comment!