composable-utils 0.1.0

Simple utility functions for Option<T>, Option<Result<T, E>>, and Result<Option<T>, E>
Documentation
use composable_utils::ResultOptionExt;

enum ErrorOne {
	One,
}

enum ErrorTwo {
	Two,
	Three,
}

fn result_ok_some() -> Result<Option<&'static str>, ErrorOne> {
	Ok(Some("trans rights"))
}

fn result_ok_none() -> Result<Option<&'static str>, ErrorOne> {
	Ok(None)
}

fn result_err() -> Result<Option<&'static str>, ErrorOne> {
	Err(ErrorOne::One)
}

fn option_some_ok() -> Option<Result<&'static str, ErrorOne>> {
	Some(Ok("trans rights"))
}

fn option_some_err() -> Option<Result<&'static str, ErrorOne>> {
	Some(Err(ErrorOne::One))
}

fn option_none() -> Option<Result<&'static str, ErrorOne>> {
	None
}

#[test]
fn unwrap_or_err() {
	assert!(result_ok_some().unwrap_or_err(ErrorTwo::Two).is_ok());
	assert!(result_ok_none().unwrap_or_err(ErrorTwo::Two).is_err());
	assert!(result_err().unwrap_or_err(ErrorTwo::Two).is_err());

	assert!(option_some_ok().unwrap_or_err(ErrorTwo::Two).is_ok());
	assert!(option_some_err().unwrap_or_err(ErrorTwo::Two).is_err());
	assert!(option_none().unwrap_or_err(ErrorTwo::Two).is_err());
}

#[test]
fn unwrap_or_else_err() {
	assert!(result_ok_some().unwrap_or_else_err(|| ErrorTwo::Two).is_ok());
	assert!(result_ok_none().unwrap_or_else_err(|| ErrorTwo::Two).is_err());
	assert!(result_err().unwrap_or_else_err(|| ErrorTwo::Two).is_err());

	assert!(option_some_ok().unwrap_or_else_err(|| ErrorTwo::Two).is_ok());
	assert!(option_some_err().unwrap_or_else_err(|| ErrorTwo::Two).is_err());
	assert!(option_none().unwrap_or_else_err(|| ErrorTwo::Two).is_err());
}

#[test]
fn unwrap_or_map_err() {
	assert!(result_ok_some()
		.unwrap_or_map_err(ErrorTwo::Two, |_| ErrorTwo::Three)
		.is_ok());
	assert!(matches!(
		result_ok_none().unwrap_or_map_err(ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Two)
	));
	assert!(matches!(
		result_err().unwrap_or_map_err(ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Three)
	));

	assert!(option_some_ok()
		.unwrap_or_map_err(ErrorTwo::Two, |_| ErrorTwo::Three)
		.is_ok());
	assert!(matches!(
		option_some_err().unwrap_or_map_err(ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Three)
	));
	assert!(matches!(
		option_none().unwrap_or_map_err(ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Two)
	));
}

#[test]
fn unwrap_or_else_map_err() {
	assert!(result_ok_some()
		.unwrap_or_else_map_err(|| ErrorTwo::Two, |_| ErrorTwo::Three)
		.is_ok());
	assert!(matches!(
		result_ok_none().unwrap_or_else_map_err(|| ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Two)
	));
	assert!(matches!(
		result_err().unwrap_or_else_map_err(|| ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Three)
	));

	assert!(option_some_ok()
		.unwrap_or_else_map_err(|| ErrorTwo::Two, |_| ErrorTwo::Three)
		.is_ok());
	assert!(matches!(
		option_some_err().unwrap_or_else_map_err(|| ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Three)
	));
	assert!(matches!(
		option_none().unwrap_or_else_map_err(|| ErrorTwo::Two, |_| ErrorTwo::Three),
		Err(ErrorTwo::Two)
	));
}