@@ -617,6 +617,8 @@ public function toRight(callable $left): Either
617617 }
618618
619619 /**
620+ * @deprecated use {@see Option::when}
621+ *
620622 * Fabric method.
621623 *
622624 * ```php
@@ -640,6 +642,8 @@ public static function cond(bool $condition, mixed $some): Option
640642 }
641643
642644 /**
645+ * @deprecated use {@see Option::when}
646+ *
643647 * Fabric method.
644648 *
645649 * ```php
@@ -665,6 +669,56 @@ public static function condLazy(bool $condition, callable $some): Option
665669 : self ::none ();
666670 }
667671
672+ /**
673+ * Fabric method.
674+ *
675+ * ```php
676+ * >>> Option::when(true, fn() => 1);
677+ * => Some(1)
678+ *
679+ * >>> Option::when(false, fn() => 1);
680+ * => None
681+ * ```
682+ *
683+ * Create {@see Some} from value if given condition is true
684+ * Create {@see None} if given condition is false
685+ *
686+ * @psalm-pure
687+ * @psalm-template AI
688+ * @psalm-param pure-callable(): AI $callback
689+ * @psalm-return Option<AI>
690+ */
691+ public static function when (bool $ condition , callable $ callback ): Option
692+ {
693+ return $ condition
694+ ? self ::some ($ callback ())
695+ : self ::none ();
696+ }
697+
698+ /**
699+ * Fabric method.
700+ *
701+ * ```php
702+ * >>> Option::unless(false, fn() => 1);
703+ * => Some(1)
704+ *
705+ * >>> Option::unless(true, fn() => 1);
706+ * => None
707+ * ```
708+ *
709+ * Create {@see Some} from value if given condition is false
710+ * Create {@see None} if given condition is true
711+ *
712+ * @psalm-pure
713+ * @psalm-template AI
714+ * @psalm-param pure-callable(): AI $callback
715+ * @psalm-return Option<AI>
716+ */
717+ public static function unless (bool $ condition , callable $ callback ): Option
718+ {
719+ return self ::when (!$ condition , $ callback );
720+ }
721+
668722 /**
669723 * Convert optional value to ArrayList collection
670724 * via transformation function $callback.
0 commit comments