Skip to content

Commit dd6709c

Browse files
committed
Added Using support
1 parent 2158b0a commit dd6709c

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/MorleyDev.Reactive.Monad/LinqExtensions.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using MorleyDev.Reactive.Monad;
22
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using System.Reactive.Threading.Tasks;
35

46
namespace System.Linq
57
{
@@ -26,6 +28,30 @@ namespace System.Reactive.Linq
2628
{
2729
public static class Monad
2830
{
31+
public static IO<T> Using<T, TDisposable>(Func<TDisposable> factory, Func<TDisposable, T> method)
32+
where TDisposable : IDisposable
33+
=> MorleyDev.Reactive.Monad.IO.From(Observable.Using(factory, disposable => Observable.Return(method(disposable))));
34+
35+
public static IO<T> Using<T, TDisposable>(Func<TDisposable> factory, Func<TDisposable, IO<T>> method)
36+
where TDisposable : IDisposable
37+
=> MorleyDev.Reactive.Monad.IO.From(Observable.Using(factory, disposable => method(disposable)));
38+
39+
public static IO<T> Using<T, TDisposable>(Func<TDisposable> factory, Func<TDisposable, Task<T>> method)
40+
where TDisposable : IDisposable
41+
=> MorleyDev.Reactive.Monad.IO.From(Observable.Using(factory, disposable => method(disposable).ToObservable()));
42+
43+
public static MaybeIO<T> Using<T, TDisposable>(Func<TDisposable> factory, Func<TDisposable, Maybe<T>> method)
44+
where TDisposable : IDisposable
45+
=> MorleyDev.Reactive.Monad.IO.From(Observable.Using(factory, disposable => Observable.Return(method(disposable))));
46+
47+
public static MaybeIO<T> Using<T, TDisposable>(Func<TDisposable> factory, Func<TDisposable, MaybeIO<T>> method)
48+
where TDisposable : IDisposable
49+
=> MorleyDev.Reactive.Monad.MaybeIO.From(Observable.Using(factory, disposable => method(disposable)));
50+
51+
public static MaybeIO<T> Using<T, TDisposable>(Func<TDisposable> factory, Func<TDisposable, Task<Maybe<T>>> method)
52+
where TDisposable : IDisposable
53+
=> MorleyDev.Reactive.Monad.IO.From(Observable.Using(factory, disposable => method(disposable).ToObservable()));
54+
2955
public static IO<U> Select<U, T>(this IO<T> self, Func<T, U> mapper) => IO<U>.From(self.AsObservable().Select(mapper));
3056
public static MaybeIO<T> Where<T>(this IO<T> self, Func<T, bool> predicate) => MaybeIO.From(self.AsObservable().Where(predicate));
3157
public static IO<U> SelectMany<U, T>(this IO<T> self, Func<T, IO<U>> mapper) => IO<U>.From(self.AsObservable().SelectMany(mapper));

0 commit comments

Comments
 (0)