Skip to content

Commit dda0126

Browse files
committed
resultoption comments
1 parent 0efd9c3 commit dda0126

File tree

1 file changed

+76
-3
lines changed

1 file changed

+76
-3
lines changed

src/Danom/ResultOption/ResultOption.cs

+76-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public readonly struct ResultOption<T, TError>()
2525
: IResultOption<T, TError>
2626
{
2727
private readonly IOption<T> _ok = Option<T>.None();
28-
private readonly TError? _error;
28+
private readonly TError? _error = default;
2929

3030
private ResultOption(IOption<T> option) : this()
3131
{
@@ -42,62 +42,135 @@ private ResultOption(TError tError) : this()
4242
/// <summary>
4343
/// Returns true if the ResultOption is Ok, false otherwise.
4444
/// </summary>
45-
public bool IsOk { get; }
45+
public bool IsOk { get; } = false;
4646

4747
public bool IsNone => !IsOk && !IsError;
4848

4949
/// <summary>
5050
/// Returns true if the ResultOption is Error, false otherwise.
5151
/// </summary>
52-
public bool IsError { get; }
52+
public bool IsError { get; } = false;
5353

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>
5461
public U Match<U>(Func<T, U> ok, Func<U> none, Func<TError, U> error) =>
5562
IsError && _error is TError tError ?
5663
error(tError) :
5764
_ok.Match(ok, none);
5865

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>
5972
public IResultOption<U, TError> Bind<U>(
6073
Func<T, IResultOption<U, TError>> bind) =>
6174
Match(bind, ResultOption<U, TError>.None, ResultOption<U, TError>.Error);
6275

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>
6382
public IResultOption<U, TError> Map<U>(
6483
Func<T, U> map) =>
6584
Bind(x => ResultOption<U, TError>.Ok(map(x)));
6685

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>
6792
public IResultOption<T, UError> MapError<UError>(
6893
Func<TError, UError> mapError) =>
6994
Match(ResultOption<T, UError>.Ok, ResultOption<T, UError>.None, e =>
7095
ResultOption<T, UError>.Error(mapError(e)));
7196

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>
72103
public T DefaultValue(
73104
T defaultValue) =>
74105
Match(ok => ok, () => defaultValue, _ => defaultValue);
75106

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>
76112
public T DefaultWith(
77113
Func<T> defaultWith) =>
78114
Match(ok => ok, defaultWith, _ => defaultWith());
79115

116+
/// <summary>
117+
/// Creates a new ResultOption with the specified value.
118+
/// </summary>
119+
/// <param name="value"></param>
120+
/// <returns></returns>
80121
public static IResultOption<T, TError> Ok(T value) =>
81122
new ResultOption<T, TError>(Option<T>.Some(value));
82123

124+
/// <summary>
125+
/// Creates ResultOption with the specified value wrapped in a completed Task.
126+
/// </summary>
127+
/// <param name="value"></param>
128+
/// <returns></returns>
83129
public static Task<IResultOption<T, TError>> OkAsync(T value) =>
84130
Task.FromResult(Ok(value));
85131

132+
/// <summary>
133+
/// Creates ResultOption with the value of the awaited Task.
134+
/// </summary>
135+
/// <param name="valueTask"></param>
136+
/// <returns></returns>
86137
public static async Task<IResultOption<T, TError>> OkAsync(Task<T> valueTask) =>
87138
Ok(await valueTask);
88139

140+
/// <summary>
141+
/// Creates a new ResultOption with no value.
142+
/// </summary>
143+
/// <returns></returns>
89144
public static IResultOption<T, TError> None() =>
90145
new ResultOption<T, TError>(Option<T>.None());
91146

147+
/// <summary>
148+
/// Creates a new ResultOption with no value wrapped in a completed Task.
149+
/// </summary>
150+
/// <returns></returns>
92151
public static Task<IResultOption<T, TError>> NoneAsync() =>
93152
Task.FromResult(None());
94153

154+
/// <summary>
155+
/// Creates a new ResultOption with the specified error.
156+
/// </summary>
157+
/// <param name="errors"></param>
95158
public static IResultOption<T, TError> Error(TError error) =>
96159
new ResultOption<T, TError>(error);
97160

161+
/// <summary>
162+
/// Creates ResultOption with the specified error wrapped in a completed Task.
163+
/// </summary>
164+
/// <param name="errors"></param>
165+
/// <returns></returns>
98166
public static Task<IResultOption<T, TError>> ErrorAsync(TError error) =>
99167
Task.FromResult(Error(error));
100168

169+
/// <summary>
170+
/// Creates ResultOption with the value of the awaited Task.
171+
/// </summary>
172+
/// <param name="errors"></param>
173+
/// <returns></returns>
101174
public static async Task<IResultOption<T, TError>> ErrorAsync(Task<TError> error) =>
102175
Error(await error);
103176

0 commit comments

Comments
 (0)