Skip to content

Commit 9361a4b

Browse files
committed
OptionParse
1 parent 4089e7d commit 9361a4b

File tree

3 files changed

+478
-3
lines changed

3 files changed

+478
-3
lines changed

src/Danom/Option/OptionParse.cs

+289
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,289 @@
1+
namespace Danom;
2+
3+
using System.Globalization;
4+
5+
/// <summary>
6+
/// boolOption
7+
/// </summary>
8+
public static class boolOption
9+
{
10+
/// <summary>
11+
/// Attempt to parse string as bool, return None if invalid, Some if valid.
12+
/// </summary>
13+
/// <param name="x"></param>
14+
/// <returns></returns>
15+
public static Option<bool> TryParse(string? x) =>
16+
bool.TryParse(x, out var y) ? Option.Some(y) : Option<bool>.NoneValue;
17+
}
18+
19+
/// <summary>
20+
/// byteOption
21+
/// </summary>
22+
public static class byteOption
23+
{
24+
/// <summary>
25+
/// Attempt to parse string as byte, return None if invalid, Some if valid.
26+
/// </summary>
27+
/// <param name="x"></param>
28+
/// <param name="provider"></param>
29+
/// <returns></returns>
30+
public static Option<byte> TryParse(string? x, IFormatProvider? provider = null) =>
31+
byte.TryParse(x, provider, out var y) ? Option.Some(y) : Option<byte>.NoneValue;
32+
}
33+
34+
/// <summary>
35+
/// shortOption
36+
/// </summary>
37+
public static class shortOption
38+
{
39+
/// <summary>
40+
/// Attempt to parse string as short, return None if invalid, Some if valid.
41+
/// </summary>
42+
/// <param name="x"></param>
43+
/// <param name="provider"></param>
44+
/// <returns></returns>
45+
public static Option<short> TryParse(string? x, IFormatProvider? provider = null) =>
46+
short.TryParse(x, provider, out var y) ? Option.Some(y) : Option<short>.NoneValue;
47+
}
48+
49+
/// <summary>
50+
/// intOption
51+
/// </summary>
52+
public static class intOption
53+
{
54+
/// <summary>
55+
/// Attempt to parse string as int, return None if invalid, Some if valid.
56+
/// </summary>
57+
/// <param name="x"></param>
58+
/// <param name="provider"></param>
59+
/// <returns></returns>
60+
public static Option<int> TryParse(string? x, IFormatProvider? provider = null) =>
61+
int.TryParse(x, provider, out var y) ? Option.Some(y) : Option<int>.NoneValue;
62+
}
63+
64+
/// <summary>
65+
/// longOption
66+
/// </summary>
67+
public static class longOption
68+
{
69+
/// <summary>
70+
/// Attempt to parse string as long, return None if invalid, Some if valid.
71+
/// </summary>
72+
/// <param name="x"></param>
73+
/// <param name="provider"></param>
74+
/// <returns></returns>
75+
public static Option<long> TryParse(string? x, IFormatProvider? provider = null) =>
76+
long.TryParse(x, provider, out var y) ? Option.Some(y) : Option<long>.NoneValue;
77+
}
78+
79+
/// <summary>
80+
/// decimalOption
81+
/// </summary>
82+
public static class decimalOption
83+
{
84+
/// <summary>
85+
/// Attempt to parse string as decimal, return None if invalid, Some if valid.
86+
/// </summary>
87+
/// <param name="x"></param>
88+
/// <param name="provider"></param>
89+
/// <returns></returns>
90+
public static Option<decimal> TryParse(string? x, IFormatProvider? provider = null) =>
91+
decimal.TryParse(x, provider, out var y) ? Option.Some(y) : Option<decimal>.NoneValue;
92+
}
93+
94+
/// <summary>
95+
/// doubleOption
96+
/// </summary>
97+
public static class doubleOption
98+
{
99+
/// <summary>
100+
/// Attempt to parse string as double, return None if invalid, Some if valid.
101+
/// </summary>
102+
/// <param name="x"></param>
103+
/// <param name="provider"></param>
104+
/// <returns></returns>
105+
public static Option<double> TryParse(string? x, IFormatProvider? provider = null) =>
106+
double.TryParse(x, provider, out var y) ? Option.Some(y) : Option<double>.NoneValue;
107+
}
108+
109+
/// <summary>
110+
/// floatOption
111+
/// </summary>
112+
public static class floatOption
113+
{
114+
/// <summary>
115+
/// Attempt to parse string as float, return None if invalid, Some if valid.
116+
/// </summary>
117+
/// <param name="x"></param>
118+
/// <param name="provider"></param>
119+
/// <returns></returns>
120+
public static Option<float> TryParse(string? x, IFormatProvider? provider = null) =>
121+
float.TryParse(x, provider, out var y) ? Option.Some(y) : Option<float>.NoneValue;
122+
}
123+
124+
/// <summary>
125+
/// GuidOption
126+
/// </summary>
127+
public static class GuidOption
128+
{
129+
/// <summary>
130+
/// Attempt to parse string as Guid, return None if invalid, Some if valid.
131+
/// </summary>
132+
/// <param name="x"></param>
133+
/// <param name="provider"></param>
134+
/// <returns></returns>
135+
public static Option<Guid> TryParse(string? x, IFormatProvider? provider = null) =>
136+
Guid.TryParse(x, provider, out var y) ? Option.Some(y) : Option<Guid>.NoneValue;
137+
138+
/// <summary>
139+
/// Attempt to parse string as Guid, return None if invalid, Some if valid.
140+
/// </summary>
141+
/// <param name="x"></param>
142+
/// <param name="format"></param>
143+
/// <returns></returns>
144+
public static Option<Guid> TryParseExact(string? x, string? format) =>
145+
Guid.TryParseExact(x, format, out var y) ? Option.Some(y) : Option<Guid>.NoneValue;
146+
}
147+
148+
/// <summary>
149+
/// DateTimeOffsetOption
150+
/// </summary>
151+
public static class DateTimeOffsetOption
152+
{
153+
/// <summary>
154+
/// Attempt to parse string as DateTimeOffset, return None if invalid, Some if valid.
155+
/// </summary>
156+
/// <param name="x"></param>
157+
/// <param name="provider"></param>
158+
/// <returns></returns>
159+
public static Option<DateTimeOffset> TryParse(string? x, IFormatProvider? provider = null) =>
160+
DateTimeOffset.TryParse(x, provider, out var y) ? Option.Some(y) : Option<DateTimeOffset>.NoneValue;
161+
162+
/// <summary>
163+
/// Attempt to parse string as DateTimeOffset, return None if invalid, Some if valid.
164+
/// </summary>
165+
/// <param name="x"></param>
166+
/// <param name="format"></param>
167+
/// <param name="provider"></param>
168+
/// <param name="dateTimeStyles"></param>
169+
/// <returns></returns>
170+
public static Option<DateTimeOffset> TryParseExact(string? x, string? format, IFormatProvider? provider = null, DateTimeStyles dateTimeStyles = DateTimeStyles.None) =>
171+
DateTimeOffset.TryParseExact(x, format, provider, dateTimeStyles, out var y) ? Option.Some(y) : Option<DateTimeOffset>.NoneValue;
172+
}
173+
174+
/// <summary>
175+
/// DateTimeOption
176+
/// </summary>
177+
public static class DateTimeOption
178+
{
179+
/// <summary>
180+
/// Attempt to parse string as DateTime, return None if invalid, Some if valid.
181+
/// </summary>
182+
/// <param name="x"></param>
183+
/// <param name="provider"></param>
184+
/// <returns></returns>
185+
public static Option<DateTime> TryParse(string? x, IFormatProvider? provider = null) =>
186+
DateTime.TryParse(x, provider, out var y) ? Option.Some(y) : Option<DateTime>.NoneValue;
187+
188+
/// <summary>
189+
/// Attempt to parse string as DateTime, return None if invalid, Some if valid.
190+
/// </summary>
191+
/// <param name="x"></param>
192+
/// <param name="format"></param>
193+
/// <param name="provider"></param>
194+
/// <param name="dateTimeStyles"></param>
195+
/// <returns></returns>
196+
public static Option<DateTime> TryParseExact(string? x, string? format, IFormatProvider? provider = null, DateTimeStyles dateTimeStyles = DateTimeStyles.None) =>
197+
DateTime.TryParseExact(x, format, provider, dateTimeStyles, out var y) ? Option.Some(y) : Option<DateTime>.NoneValue;
198+
}
199+
200+
/// <summary>
201+
/// DateOnlyOption
202+
/// </summary>
203+
public static class DateOnlyOption
204+
{
205+
/// <summary>
206+
/// Attempt to parse string as DateOnly, return None if invalid, Some if valid.
207+
/// </summary>
208+
/// <param name="x"></param>
209+
/// <param name="provider"></param>
210+
/// <returns></returns>
211+
public static Option<DateOnly> TryParse(string? x, IFormatProvider? provider = null) =>
212+
DateOnly.TryParse(x, provider, out var y) ? Option.Some(y) : Option<DateOnly>.NoneValue;
213+
214+
/// <summary>
215+
/// Attempt to parse string as DateOnly, return None if invalid, Some if valid.
216+
/// </summary>
217+
/// <param name="x"></param>
218+
/// <param name="format"></param>
219+
/// <param name="provider"></param>
220+
/// <param name="dateTimeStyles"></param>
221+
/// <returns></returns>
222+
public static Option<DateOnly> TryParseExact(string? x, string? format, IFormatProvider? provider = null, DateTimeStyles dateTimeStyles = DateTimeStyles.None) =>
223+
DateOnly.TryParseExact(x, format, provider, dateTimeStyles, out var y) ? Option.Some(y) : Option<DateOnly>.NoneValue;
224+
}
225+
226+
/// <summary>
227+
/// TimeOnlyOption
228+
/// </summary>
229+
public static class TimeOnlyOption
230+
{
231+
/// <summary>
232+
/// Attempt to parse string as TimeOnly, return None if invalid, Some if valid.
233+
/// </summary>
234+
/// <param name="x"></param>
235+
/// <param name="provider"></param>
236+
/// <returns></returns>
237+
public static Option<TimeOnly> TryParse(string? x, IFormatProvider? provider = null) =>
238+
TimeOnly.TryParse(x, provider, out var y) ? Option.Some(y) : Option<TimeOnly>.NoneValue;
239+
240+
/// <summary>
241+
/// Attempt to parse string as TimeOnly, return None if invalid, Some if valid.
242+
/// </summary>
243+
/// <param name="x"></param>
244+
/// <param name="format"></param>
245+
/// <param name="provider"></param>
246+
/// <param name="dateTimeStyles"></param>
247+
/// <returns></returns>
248+
public static Option<TimeOnly> TryParseExact(string? x, string? format, IFormatProvider? provider = null, DateTimeStyles dateTimeStyles = DateTimeStyles.None) =>
249+
TimeOnly.TryParseExact(x, format, provider, dateTimeStyles, out var y) ? Option.Some(y) : Option<TimeOnly>.NoneValue;
250+
}
251+
252+
/// <summary>
253+
/// TimeSpanOption
254+
/// </summary>
255+
public static class TimeSpanOption
256+
{
257+
/// <summary>
258+
/// Attempt to parse string as TimeSpan, return None if invalid, Some if valid.
259+
/// </summary>
260+
/// <param name="x"></param>
261+
/// <param name="provider"></param>
262+
/// <returns></returns>
263+
public static Option<TimeSpan> TryParse(string? x, IFormatProvider? provider = null) =>
264+
TimeSpan.TryParse(x, provider, out var y) ? Option.Some(y) : Option<TimeSpan>.NoneValue;
265+
266+
/// <summary>
267+
/// Attempt to parse string as TimeSpan, return None if invalid, Some if valid.
268+
/// </summary>
269+
/// <param name="x"></param>
270+
/// <param name="format"></param>
271+
/// <param name="provider"></param>
272+
/// <returns></returns>
273+
public static Option<TimeSpan> TryParseExact(string? x, string? format, IFormatProvider? provider = null) =>
274+
TimeSpan.TryParseExact(x, format, provider, out var y) ? Option.Some(y) : Option<TimeSpan>.NoneValue;
275+
}
276+
277+
/// <summary>
278+
/// EnumOption
279+
/// </summary>
280+
public static class EnumOption
281+
{
282+
/// <summary>
283+
/// Attempt to parse string as Enum, return None if invalid, Some if valid.
284+
/// </summary>
285+
/// <param name="x"></param>
286+
/// <returns></returns>
287+
public static Option<TEnum> TryParse<TEnum>(string? x) where TEnum : struct =>
288+
Enum.TryParse<TEnum>(x, out var y) ? Option.Some(y) : Option<TEnum>.NoneValue;
289+
}

0 commit comments

Comments
 (0)