diff --git a/src/snakia/core/rx/__init__.py b/src/snakia/core/rx/__init__.py index 995ffa5..3c3d499 100644 --- a/src/snakia/core/rx/__init__.py +++ b/src/snakia/core/rx/__init__.py @@ -4,6 +4,7 @@ from .bindable import Bindable from .chain import chain from .combine import combine from .concat import concat +from .cond import cond from .const import const from .filter import filter # noqa: W0622 # pylint: disable=W0622 from .map import map # noqa: W0622 # pylint: disable=W0622 @@ -18,6 +19,7 @@ __all__ = [ "chain", "combine", "concat", + "cond", "const", "filter", "map", diff --git a/src/snakia/core/rx/cond.py b/src/snakia/core/rx/cond.py new file mode 100644 index 0000000..fce6cdb --- /dev/null +++ b/src/snakia/core/rx/cond.py @@ -0,0 +1,13 @@ +from typing import Callable + + +def cond[**P, T, F]( + condition: Callable[P, bool], + if_true: Callable[P, T], + if_false: Callable[P, F], +) -> Callable[P, T | F]: + return lambda *args, **kw: ( + if_true(*args, **kw) + if condition(*args, **kw) + else if_false(*args, **kw) + )