From 32839922e63dea002761c07cf9549c36832ac242 Mon Sep 17 00:00:00 2001 From: Tom Scheler Date: Sun, 1 Oct 2023 22:49:37 +0200 Subject: [PATCH] Add await support for `OptionAsync` --- .../Option/OptionAsync/OptionAsync.cs | 8 ++++++++ LanguageExt.Tests/OptionAsyncTests.cs | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/LanguageExt.Core/Monads/Alternative Value Monads/Option/OptionAsync/OptionAsync.cs b/LanguageExt.Core/Monads/Alternative Value Monads/Option/OptionAsync/OptionAsync.cs index 3728095f5..eec62de9c 100644 --- a/LanguageExt.Core/Monads/Alternative Value Monads/Option/OptionAsync/OptionAsync.cs +++ b/LanguageExt.Core/Monads/Alternative Value Monads/Option/OptionAsync/OptionAsync.cs @@ -139,6 +139,14 @@ public OptionAsync(IEnumerable option) : null; } + /// + /// Custom awaiter that turns an OptionAsync into an Option + /// + public TaskAwaiter> GetAwaiter() + => Data.Map(d => + d.IsSome ? Option.Some(d.Value!) : Option.None) + .GetAwaiter(); + /// /// Implicit conversion operator from A to Option /// diff --git a/LanguageExt.Tests/OptionAsyncTests.cs b/LanguageExt.Tests/OptionAsyncTests.cs index def1bb58d..342c34dbd 100644 --- a/LanguageExt.Tests/OptionAsyncTests.cs +++ b/LanguageExt.Tests/OptionAsyncTests.cs @@ -300,6 +300,13 @@ public async Task MOptionAsync_BiFoldAsync_OverloadAsyncAsync_IsNone_DelegateNon Assert.True(result); } + [Fact] + public async Task AwaitSomeCaseTest() + => Assert.Equal(Some(10), await OptionAsync.Some(10)); + + [Fact] + public async Task AwaitNoneCaseTest() + => Assert.Equal(None, await OptionAsync.None); // Not valuable any more //[Fact] //public async void SequenceFlip()