Skip to content

Commit

Permalink
support nullable tasks in OrEmpty methods
Browse files Browse the repository at this point in the history
  • Loading branch information
hoseinzadehashraf committed Jun 18, 2024
1 parent c9b5650 commit 6957fc0
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 14 deletions.
28 changes: 20 additions & 8 deletions Olive/-Extensions/Async/Linq.SpecialCollectionTypes.Async.cs
Original file line number Diff line number Diff line change
Expand Up @@ -342,8 +342,11 @@ public static Task<TResult> Max<TSource, TResult>(
public static Task<TResult> Min<TSource, TResult>(
this Task<TSource[]> @this, Func<TSource, TResult> func) => @this.ForLinq().Min(func);

public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<TSource[]> @this)
=> @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<TSource[]> @this)
{
if(@this is null) return Task.FromResult(Enumerable.Empty<TSource>());
return @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
}

/// <summary>
/// If a specified condition is true, then the filter predicate will be executed.
Expand Down Expand Up @@ -606,8 +609,11 @@ public static Task<TResult> Max<TSource, TResult>(
public static Task<TResult> Min<TSource, TResult>(
this Task<IOrderedEnumerable<TSource>> @this, Func<TSource, TResult> func) => @this.ForLinq().Min(func);

public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<IOrderedEnumerable<TSource>> @this)
=> @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<IOrderedEnumerable<TSource>> @this)
{
if(@this is null) return Task.FromResult(Enumerable.Empty<TSource>());
return @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
}

/// <summary>
/// If a specified condition is true, then the filter predicate will be executed.
Expand Down Expand Up @@ -870,8 +876,11 @@ public static Task<TResult> Max<TSource, TResult>(
public static Task<TResult> Min<TSource, TResult>(
this Task<List<TSource>> @this, Func<TSource, TResult> func) => @this.ForLinq().Min(func);

public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<List<TSource>> @this)
=> @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<List<TSource>> @this)
{
if(@this is null) return Task.FromResult(Enumerable.Empty<TSource>());
return @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
}

/// <summary>
/// If a specified condition is true, then the filter predicate will be executed.
Expand Down Expand Up @@ -1134,8 +1143,11 @@ public static Task<TResult> Max<TSource, TResult>(
public static Task<TResult> Min<TSource, TResult>(
this Task<IList<TSource>> @this, Func<TSource, TResult> func) => @this.ForLinq().Min(func);

public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<IList<TSource>> @this)
=> @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
public static Task<IEnumerable<TSource>> OrEmpty<TSource>(this Task<IList<TSource>> @this)
{
if(@this is null) return Task.FromResult(Enumerable.Empty<TSource>());
return @this.ForLinq().OrEmpty() ?? Task.FromResult(Enumerable.Empty<TSource>());
}

/// <summary>
/// If a specified condition is true, then the filter predicate will be executed.
Expand Down
3 changes: 2 additions & 1 deletion Olive/-Extensions/Async/Linq.Task.Of.IEnumerable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -336,8 +336,9 @@ public static Task<IEnumerable<T>> FilterIf<T>(this Task<IEnumerable<T>> source,
/// Returns an empty List if this collection is null.
/// </summary>
[EscapeGCop("I am the GCop solution")]
public static async Task<IEnumerable<T>> OrEmpty<T>(this Task<IEnumerable<T>> @this)
public static async Task<IEnumerable<T>> OrEmpty<T>(this Task<IEnumerable<T>>? @this)
{
if(@this is null) return Enumerable.Empty<T>();
return (await @this.ConfigureAwait(false)) ?? Enumerable.Empty<T>();
}

Expand Down
10 changes: 6 additions & 4 deletions Olive/-Extensions/Async/Task.cs
Original file line number Diff line number Diff line change
Expand Up @@ -243,10 +243,12 @@ public static TResult AwaitResultWithoutContext<TResult>(this Task<TResult> task
}

public static Task OrCompleted(this Task task) => task ?? Task.CompletedTask;

public static Task<TResult> OrCompleted<TResult>(this Task<TResult> task, TResult result = default) => task ?? Task.FromResult(result);

public static Task OrEmpty(this Task @this) => @this ?? Task.CompletedTask;

public static Task<TResult> OrEmpty<TResult>(this Task<TResult> @this, TResult result = default) => @this ?? Task.FromResult(result);

public static Task<TResult> OrCompleted<TResult>(this Task<TResult> task, TResult result = default)
{
return task ?? Task.FromResult(result);
}
}
}
2 changes: 1 addition & 1 deletion Olive/Olive.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>2.1.373.0</Version>
<Version>2.1.374.0</Version>
<OutputType>Library</OutputType>
<LangVersion>latest</LangVersion>
<!--<PackageId>Olive</PackageId>-->
Expand Down

0 comments on commit 6957fc0

Please sign in to comment.