Skip to content

Commit 5d3c9cc

Browse files
committed
Execute
1 parent 56ad744 commit 5d3c9cc

6 files changed

Lines changed: 168 additions & 24 deletions

File tree

Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1616
<PackageReadmeFile>README.md</PackageReadmeFile>
1717
<Product>Managed Code - Communication</Product>
18-
<Version>1.0.0</Version>
19-
<PackageVersion>1.0.0</PackageVersion>
18+
<Version>1.0.1</Version>
19+
<PackageVersion>1.0.1</PackageVersion>
2020
</PropertyGroup>
2121
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
2222
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>

ManagedCode.Communication/Error.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace ManagedCode.Communication;
44

5-
public class Error<TErrorCode> where TErrorCode : Enum
5+
public sealed class Error<TErrorCode> where TErrorCode : Enum
66
{
77
public Error(string message, TErrorCode? errorCode = default)
88
{

ManagedCode.Communication/ManagedCode.Communication.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netstandard2.0</TargetFramework>
4+
<TargetFrameworks>net6.0;net7.0;netstandard2.0</TargetFrameworks>
55
<Nullable>enable</Nullable>
66
<LangVersion>10</LangVersion>
77
<IsPackable>true</IsPackable>
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
5+
namespace ManagedCode.Communication;
6+
7+
public sealed partial class Result
8+
{
9+
public static Result Execute(Action action)
10+
{
11+
try
12+
{
13+
action();
14+
return Succeed();
15+
}
16+
catch (Exception e)
17+
{
18+
return new Result(Error<ErrorCode>.FromException(e));
19+
}
20+
}
21+
22+
public static Result Execute(Func<Result> func)
23+
{
24+
try
25+
{
26+
return func();
27+
}
28+
catch (Exception e)
29+
{
30+
return new Result(Error<ErrorCode>.FromException(e));
31+
}
32+
}
33+
34+
public static async Task<Result> Execute(Task task, CancellationToken cancellationToken = default)
35+
{
36+
if (task.IsCompleted)
37+
{
38+
return Succeed();
39+
}
40+
41+
if (task.IsCanceled || task.IsFaulted)
42+
{
43+
return new Result(Error<ErrorCode>.FromException(task.Exception));
44+
}
45+
46+
try
47+
{
48+
await task;
49+
return Succeed();
50+
}
51+
catch (Exception e)
52+
{
53+
return new Result(Error<ErrorCode>.FromException(e));
54+
}
55+
}
56+
57+
public static async Task<Result> Execute(Func<Task<Result>> task, CancellationToken cancellationToken = default)
58+
{
59+
try
60+
{
61+
return await task();
62+
}
63+
catch (Exception e)
64+
{
65+
return new Result(Error<ErrorCode>.FromException(e));
66+
}
67+
}
68+
}
69+
70+
public sealed partial class Result<T>
71+
{
72+
public static Result<T> Execute(Func<Result<T>> func)
73+
{
74+
try
75+
{
76+
return func();
77+
}
78+
catch (Exception e)
79+
{
80+
return new Result<T>(Error<ErrorCode>.FromException(e));
81+
}
82+
}
83+
84+
public static Result<T> Execute(Func<T> func)
85+
{
86+
try
87+
{
88+
var result = func();
89+
return Succeed(result);
90+
}
91+
catch (Exception e)
92+
{
93+
return new Result<T>(Error<ErrorCode>.FromException(e));
94+
}
95+
}
96+
97+
public static async Task<Result<T>> Execute(Func<Task<T>> task, CancellationToken cancellationToken = default)
98+
{
99+
try
100+
{
101+
var result = await task();
102+
return Succeed(result);
103+
}
104+
catch (Exception e)
105+
{
106+
return new Result<T>(Error<ErrorCode>.FromException(e));
107+
}
108+
}
109+
110+
public static async Task<Result<T>> Execute(Func<Task<Result<T>>> task, CancellationToken cancellationToken = default)
111+
{
112+
try
113+
{
114+
return await task();
115+
}
116+
catch (Exception e)
117+
{
118+
return new Result<T>(Error<ErrorCode>.FromException(e));
119+
}
120+
}
121+
122+
public static async Task<Result<T>> Execute(Task<T> task, CancellationToken cancellationToken = default)
123+
{
124+
if (task.IsCompleted)
125+
{
126+
return Succeed(task.Result);
127+
}
128+
129+
if (task.IsCanceled || task.IsFaulted)
130+
{
131+
return new Result<T>(Error<ErrorCode>.FromException(task.Exception));
132+
}
133+
134+
try
135+
{
136+
var result = await task;
137+
return Succeed(result);
138+
}
139+
catch (Exception e)
140+
{
141+
return new Result<T>(Error<ErrorCode>.FromException(e));
142+
}
143+
}
144+
}

ManagedCode.Communication/Result.cs renamed to ManagedCode.Communication/Result/Result.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace ManagedCode.Communication;
55

6-
public class Result : BaseResult<ErrorCode>
6+
public sealed partial class Result : BaseResult<ErrorCode>
77
{
88
internal Result(bool isSuccess) : base(isSuccess)
99
{
@@ -19,46 +19,46 @@ internal Result(List<Error<ErrorCode>> errors) : base(errors)
1919

2020
public static implicit operator Result(Error<ErrorCode> error)
2121
{
22-
return new(error);
22+
return new Result(error);
2323
}
2424

2525
public static implicit operator Result(List<Error<ErrorCode>> errors)
2626
{
27-
return new(errors);
27+
return new Result(errors);
2828
}
2929

3030
public static implicit operator Result(Exception exception)
3131
{
32-
return new(Error<ErrorCode>.FromException(exception));
32+
return new Result(Error<ErrorCode>.FromException(exception));
3333
}
3434

3535
public static Result Succeed()
3636
{
37-
return new(true);
37+
return new Result(true);
3838
}
3939

4040
public static Result Fail()
4141
{
42-
return new(false);
42+
return new Result(false);
4343
}
4444

4545
public static Result Fail(Error<ErrorCode> error)
4646
{
47-
return new(error);
47+
return new Result(error);
4848
}
4949

5050
public static Result Fail(List<Error<ErrorCode>> errors)
5151
{
52-
return new(errors);
52+
return new Result(errors);
5353
}
5454

5555
public static Result Fail(Exception exception)
5656
{
57-
return new(Error<ErrorCode>.FromException(exception));
57+
return new Result(Error<ErrorCode>.FromException(exception));
5858
}
5959
}
6060

61-
public class Result<T> : BaseResult<T, ErrorCode>
61+
public sealed partial class Result<T> : BaseResult<T, ErrorCode>
6262
{
6363
internal Result(T value) : base(value)
6464
{
@@ -78,47 +78,47 @@ internal Result(List<Error<ErrorCode>> errors) : base(errors)
7878

7979
public static implicit operator Result<T>(T value)
8080
{
81-
return new(value);
81+
return new Result<T>(value);
8282
}
8383

8484
public static implicit operator Result<T>(Error<ErrorCode> error)
8585
{
86-
return new(error);
86+
return new Result<T>(error);
8787
}
8888

8989
public static implicit operator Result<T>(List<Error<ErrorCode>> errors)
9090
{
91-
return new(errors);
91+
return new Result<T>(errors);
9292
}
9393

9494
public static implicit operator Result<T>(Exception exception)
9595
{
96-
return new(Error<ErrorCode>.FromException(exception));
96+
return new Result<T>(Error<ErrorCode>.FromException(exception));
9797
}
9898

9999
public static Result<T> Succeed(T value)
100100
{
101-
return new(value);
101+
return new Result<T>(value);
102102
}
103103

104104
public static Result<T> Fail()
105105
{
106-
return new(false);
106+
return new Result<T>(false);
107107
}
108108

109109
public static Result<T> Fail(Error<ErrorCode> error)
110110
{
111-
return new(error);
111+
return new Result<T>(error);
112112
}
113113

114114
public static Result<T> Fail(List<Error<ErrorCode>> errors)
115115
{
116-
return new(errors);
116+
return new Result<T>(errors);
117117
}
118118

119119
public static Result<T> Fail(Exception exception)
120120
{
121-
return new(Error<ErrorCode>.FromException(exception));
121+
return new Result<T>(Error<ErrorCode>.FromException(exception));
122122
}
123123

124124
public Result<T> WithError(Error<ErrorCode> error)

ManagedCode.Communication/ResultErrorHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace ManagedCode.Communication;
88

9-
public class ResultErrorHandler
9+
public sealed class ResultErrorHandler
1010
{
1111
private readonly ILogger<ResultErrorHandler>? _logger;
1212

0 commit comments

Comments
 (0)