OptionLike and ResultLike
Define your own Option-like and Result-like enum types. Avoid to reimplement everything of option and result for your own enums.
Option example
use option_like;
// Simple case with single argument name to use Some and None
option_like!;
let v = Some;
// every option utilities are possible including unwrap, map, and, or etc.
assert!;
// convertable to option
let opt = v.into_option;
assert!;
// pub enum with custom names instead of Some and None
option_like!;
let v = Value;
assert!;
Result example in same way
use result_like;
// simply,
result_like!;
// customizing,
result_like!;