Skip to content

Commit 81cc39c

Browse files
committed
Combine() - move to separate file
1 parent db4702b commit 81cc39c

File tree

3 files changed

+61
-53
lines changed

3 files changed

+61
-53
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System.Collections.Generic;
2+
using System.Diagnostics;
3+
using System.Linq;
4+
5+
namespace CSharpFunctionalExtensions
6+
{
7+
public partial struct Result
8+
{
9+
[DebuggerStepThrough]
10+
public static Result Combine(IEnumerable<Result> results, string errorMessagesSeparator = null)
11+
{
12+
List<Result> failedResults = results.Where(x => x.IsFailure).ToList();
13+
14+
if (failedResults.Count == 0)
15+
return Ok();
16+
17+
string errorMessage = string.Join(errorMessagesSeparator ?? ErrorMessagesSeparator, failedResults.Select(x => x.Error));
18+
return Fail(errorMessage);
19+
}
20+
21+
[DebuggerStepThrough]
22+
public static Result Combine<T>(IEnumerable<Result<T>> results, string errorMessagesSeparator = null)
23+
{
24+
var untyped = results.Select(result => (Result)result);
25+
return Combine(untyped, errorMessagesSeparator);
26+
}
27+
28+
/// <summary>
29+
/// Combines several results (and any error messages) into a single result.
30+
/// The returned result will be a failure if any of the input <paramref name="results"/> are failures.
31+
/// Error messages are concatenated with the default <see cref="Result.ErrorMessagesSeparator" /> between each message.
32+
/// </summary>
33+
/// <param name="results">The Results to be combined.</param>
34+
/// <returns>A Result that is a success when all the input <paramref name="results"/> are also successes.</returns>
35+
[DebuggerStepThrough]
36+
public static Result Combine(params Result[] results)
37+
=> Combine(results, ErrorMessagesSeparator);
38+
39+
/// <summary>
40+
/// Combines several results (and any error messages) into a single result.
41+
/// The returned result will be a failure if any of the input <paramref name="results"/> are failures.
42+
/// Error messages are concatenated with the specified <paramref name="errorMessagesSeparator"/> between each message.
43+
/// </summary>
44+
/// <param name="errorMessagesSeparator">The string to use as a separator. If omitted, the default <see cref="Result.ErrorMessagesSeparator" /> is used instead.</param>
45+
/// <param name="results">The Results to be combined.</param>
46+
/// <returns>A Result that is a success when all the input <paramref name="results"/> are also successes.</returns>
47+
[DebuggerStepThrough]
48+
public static Result Combine(string errorMessagesSeparator, params Result[] results)
49+
=> Combine(results, errorMessagesSeparator);
50+
51+
[DebuggerStepThrough]
52+
public static Result Combine<T>(params Result<T>[] results)
53+
=> Combine(results, ErrorMessagesSeparator);
54+
55+
[DebuggerStepThrough]
56+
public static Result Combine<T>(string errorMessagesSeparator, params Result<T>[] results)
57+
=> Combine(results, errorMessagesSeparator);
58+
}
59+
}

CSharpFunctionalExtensions/Result/Result.cs

Lines changed: 1 addition & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
using CSharpFunctionalExtensions.Internal;
22
using System;
3-
using System.Collections.Generic;
43
using System.Diagnostics;
5-
using System.Linq;
64
using System.Runtime.Serialization;
75
using System.Threading.Tasks;
86

97
namespace CSharpFunctionalExtensions
108
{
119
[Serializable]
12-
public struct Result : IResult, ISerializable
10+
public partial struct Result : IResult, ISerializable
1311
{
1412
private static readonly Result OkResult = new Result(false, null);
1513

@@ -221,56 +219,6 @@ public static Result FirstFailureOrSuccess(params Result[] results)
221219
return Ok();
222220
}
223221

224-
[DebuggerStepThrough]
225-
public static Result Combine(IEnumerable<Result> results, string errorMessagesSeparator = null)
226-
{
227-
List<Result> failedResults = results.Where(x => x.IsFailure).ToList();
228-
229-
if (failedResults.Count == 0)
230-
return Ok();
231-
232-
string errorMessage = string.Join(errorMessagesSeparator ?? ErrorMessagesSeparator, failedResults.Select(x => x.Error));
233-
return Fail(errorMessage);
234-
}
235-
236-
[DebuggerStepThrough]
237-
public static Result Combine<T>(IEnumerable<Result<T>> results, string errorMessagesSeparator = null)
238-
{
239-
var untyped = results.Select(result => (Result)result);
240-
return Combine(untyped, errorMessagesSeparator);
241-
}
242-
243-
/// <summary>
244-
/// Combines several results (and any error messages) into a single result.
245-
/// The returned result will be a failure if any of the input <paramref name="results"/> are failures.
246-
/// Error messages are concatenated with the default <see cref="Result.ErrorMessagesSeparator" /> between each message.
247-
/// </summary>
248-
/// <param name="results">The Results to be combined.</param>
249-
/// <returns>A Result that is a success when all the input <paramref name="results"/> are also successes.</returns>
250-
[DebuggerStepThrough]
251-
public static Result Combine(params Result[] results)
252-
=> Combine(results, ErrorMessagesSeparator);
253-
254-
/// <summary>
255-
/// Combines several results (and any error messages) into a single result.
256-
/// The returned result will be a failure if any of the input <paramref name="results"/> are failures.
257-
/// Error messages are concatenated with the specified <paramref name="errorMessagesSeparator"/> between each message.
258-
/// </summary>
259-
/// <param name="errorMessagesSeparator">The string to use as a separator. If omitted, the default <see cref="Result.ErrorMessagesSeparator" /> is used instead.</param>
260-
/// <param name="results">The Results to be combined.</param>
261-
/// <returns>A Result that is a success when all the input <paramref name="results"/> are also successes.</returns>
262-
[DebuggerStepThrough]
263-
public static Result Combine(string errorMessagesSeparator, params Result[] results)
264-
=> Combine(results, errorMessagesSeparator);
265-
266-
[DebuggerStepThrough]
267-
public static Result Combine<T>(params Result<T>[] results)
268-
=> Combine(results, ErrorMessagesSeparator);
269-
270-
[DebuggerStepThrough]
271-
public static Result Combine<T>(string errorMessagesSeparator, params Result<T>[] results)
272-
=> Combine(results, errorMessagesSeparator);
273-
274222
private static readonly Func<Exception, string> DefaultTryErrorHandler = exc => exc.Message;
275223

276224
public static Result Try(Action action, Func<Exception, string> errorHandler = null)

CSharpFunctionalExtensionsNet4.0/CSharpFunctionalExtensionsNet4.0.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
<Compile Include="..\CSharpFunctionalExtensions\Result\Extensions\TapAsyncRight.cs" Link="Result\Extensions\TapAsyncRight.cs" />
6464
<Compile Include="..\CSharpFunctionalExtensions\Result\Internal\ResultCommonLogic.cs" Link="Result\Internal\ResultCommonLogic.cs" />
6565
<Compile Include="..\CSharpFunctionalExtensions\Result\Internal\ResultMessages.cs" Link="Result\Internal\ResultMessages.cs" />
66+
<Compile Include="..\CSharpFunctionalExtensions\Result\Methods\Combine.cs" Link="Result\Methods\Combine.cs" />
6667
<Compile Include="..\CSharpFunctionalExtensions\Result\IResult.cs" Link="Result\IResult.cs" />
6768
<Compile Include="..\CSharpFunctionalExtensions\Result\Result.cs" Link="Result\Result.cs" />
6869
<Compile Include="..\CSharpFunctionalExtensions\Result\ResultT.cs" Link="Result\ResultT.cs" />

0 commit comments

Comments
 (0)