@@ -25,7 +25,7 @@ public readonly struct ResultOption<T, TError>()
25
25
: IResultOption < T , TError >
26
26
{
27
27
private readonly IOption < T > _ok = Option < T > . None ( ) ;
28
- private readonly TError ? _error ;
28
+ private readonly TError ? _error = default ;
29
29
30
30
private ResultOption ( IOption < T > option ) : this ( )
31
31
{
@@ -42,62 +42,135 @@ private ResultOption(TError tError) : this()
42
42
/// <summary>
43
43
/// Returns true if the ResultOption is Ok, false otherwise.
44
44
/// </summary>
45
- public bool IsOk { get ; }
45
+ public bool IsOk { get ; } = false ;
46
46
47
47
public bool IsNone => ! IsOk && ! IsError ;
48
48
49
49
/// <summary>
50
50
/// Returns true if the ResultOption is Error, false otherwise.
51
51
/// </summary>
52
- public bool IsError { get ; }
52
+ public bool IsError { get ; } = false ;
53
53
54
+ /// <summary>
55
+ /// If Result is Ok evaluate the ok delegate, otherwise error.
56
+ /// </summary>
57
+ /// <typeparam name="U"></typeparam>
58
+ /// <param name="ok"></param>
59
+ /// <param name="error"></param>
60
+ /// <returns></returns>
54
61
public U Match < U > ( Func < T , U > ok , Func < U > none , Func < TError , U > error ) =>
55
62
IsError && _error is TError tError ?
56
63
error ( tError ) :
57
64
_ok . Match ( ok , none ) ;
58
65
66
+ /// <summary>
67
+ /// Evaluates the bind delegate if ResultOption is Ok.
68
+ /// </summary>
69
+ /// <typeparam name="U"></typeparam>
70
+ /// <param name="bind"></param>
71
+ /// <returns></returns>
59
72
public IResultOption < U , TError > Bind < U > (
60
73
Func < T , IResultOption < U , TError > > bind ) =>
61
74
Match ( bind , ResultOption < U , TError > . None , ResultOption < U , TError > . Error ) ;
62
75
76
+ /// <summary>
77
+ /// Evaluates the map delegate if ResultOption is Ok.
78
+ /// </summary>
79
+ /// <typeparam name="U"></typeparam>
80
+ /// <param name="map"></param>
81
+ /// <returns></returns>
63
82
public IResultOption < U , TError > Map < U > (
64
83
Func < T , U > map ) =>
65
84
Bind ( x => ResultOption < U , TError > . Ok ( map ( x ) ) ) ;
66
85
86
+ /// <summary>
87
+ /// Evaluates the mapError delegate if Result is Error.
88
+ /// </summary>
89
+ /// <typeparam name="U"></typeparam>
90
+ /// <param name="map"></param>
91
+ /// <returns></returns>
67
92
public IResultOption < T , UError > MapError < UError > (
68
93
Func < TError , UError > mapError ) =>
69
94
Match ( ResultOption < T , UError > . Ok , ResultOption < T , UError > . None , e =>
70
95
ResultOption < T , UError > . Error ( mapError ( e ) ) ) ;
71
96
97
+ /// <summary>
98
+ /// Returns the value of ResultOption if it is T, otherwise returns the
99
+ /// specified default value.
100
+ /// </summary>
101
+ /// <param name="defaultValue"></param>
102
+ /// <returns></returns>
72
103
public T DefaultValue (
73
104
T defaultValue ) =>
74
105
Match ( ok => ok , ( ) => defaultValue , _ => defaultValue ) ;
75
106
107
+ /// <summary>
108
+ /// Returns the value of ResultOption if it is T, otherwise returns the
109
+ /// </summary>
110
+ /// <param name="defaultWith"></param>
111
+ /// <returns></returns>
76
112
public T DefaultWith (
77
113
Func < T > defaultWith ) =>
78
114
Match ( ok => ok , defaultWith , _ => defaultWith ( ) ) ;
79
115
116
+ /// <summary>
117
+ /// Creates a new ResultOption with the specified value.
118
+ /// </summary>
119
+ /// <param name="value"></param>
120
+ /// <returns></returns>
80
121
public static IResultOption < T , TError > Ok ( T value ) =>
81
122
new ResultOption < T , TError > ( Option < T > . Some ( value ) ) ;
82
123
124
+ /// <summary>
125
+ /// Creates ResultOption with the specified value wrapped in a completed Task.
126
+ /// </summary>
127
+ /// <param name="value"></param>
128
+ /// <returns></returns>
83
129
public static Task < IResultOption < T , TError > > OkAsync ( T value ) =>
84
130
Task . FromResult ( Ok ( value ) ) ;
85
131
132
+ /// <summary>
133
+ /// Creates ResultOption with the value of the awaited Task.
134
+ /// </summary>
135
+ /// <param name="valueTask"></param>
136
+ /// <returns></returns>
86
137
public static async Task < IResultOption < T , TError > > OkAsync ( Task < T > valueTask ) =>
87
138
Ok ( await valueTask ) ;
88
139
140
+ /// <summary>
141
+ /// Creates a new ResultOption with no value.
142
+ /// </summary>
143
+ /// <returns></returns>
89
144
public static IResultOption < T , TError > None ( ) =>
90
145
new ResultOption < T , TError > ( Option < T > . None ( ) ) ;
91
146
147
+ /// <summary>
148
+ /// Creates a new ResultOption with no value wrapped in a completed Task.
149
+ /// </summary>
150
+ /// <returns></returns>
92
151
public static Task < IResultOption < T , TError > > NoneAsync ( ) =>
93
152
Task . FromResult ( None ( ) ) ;
94
153
154
+ /// <summary>
155
+ /// Creates a new ResultOption with the specified error.
156
+ /// </summary>
157
+ /// <param name="errors"></param>
95
158
public static IResultOption < T , TError > Error ( TError error ) =>
96
159
new ResultOption < T , TError > ( error ) ;
97
160
161
+ /// <summary>
162
+ /// Creates ResultOption with the specified error wrapped in a completed Task.
163
+ /// </summary>
164
+ /// <param name="errors"></param>
165
+ /// <returns></returns>
98
166
public static Task < IResultOption < T , TError > > ErrorAsync ( TError error ) =>
99
167
Task . FromResult ( Error ( error ) ) ;
100
168
169
+ /// <summary>
170
+ /// Creates ResultOption with the value of the awaited Task.
171
+ /// </summary>
172
+ /// <param name="errors"></param>
173
+ /// <returns></returns>
101
174
public static async Task < IResultOption < T , TError > > ErrorAsync ( Task < TError > error ) =>
102
175
Error ( await error ) ;
103
176
0 commit comments