Source code for soulfire.resources
from __future__ import annotations
from typing import Never
from effect_py import Effect, EffectGen, Scope, add_finalizer, gen, scoped
[docs]
def ensuring[A, E = Never, R = Never](
effect: Effect[A, E, R],
finalizer: Effect[object],
) -> Effect[A, E, R]:
"""Run a scope finalizer after success, failure, defect, or interruption."""
@gen
def run() -> EffectGen[A, E, R | Scope]:
yield from add_finalizer(lambda _: finalizer)
return (yield from effect)
return scoped(run)