Skip to content

Commit d2eb672

Browse files
committed
Do not duplicate code
1 parent cdad881 commit d2eb672

3 files changed

Lines changed: 37 additions & 41 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace Scarlet.System.Text.Json.DateTimeConverter;
4+
5+
internal static class DateTimeConverterFactoryHelper
6+
{
7+
public static JsonConverter CreateConverter(Type typeToConvert, string format)
8+
{
9+
ArgumentNullException.ThrowIfNull(typeToConvert);
10+
11+
if (typeToConvert == typeof(DateTime))
12+
{
13+
return Converters.DateTimeConverter.FromFormat(format);
14+
}
15+
16+
if (typeToConvert == typeof(DateTime?))
17+
{
18+
return Converters.DateTimeNullableConverter.FromFormat(format);
19+
}
20+
21+
if (typeToConvert == typeof(DateTimeOffset))
22+
{
23+
return Converters.DateTimeOffsetConverter.FromFormat(format);
24+
}
25+
26+
if (typeToConvert == typeof(DateTimeOffset?))
27+
{
28+
return Converters.DateTimeOffsetNullableConverter.FromFormat(format);
29+
}
30+
31+
throw new NotSupportedException($"{typeToConvert.FullName} is not supported by the {nameof(DateTimeConverterFactoryHelper)}.");
32+
}
33+
}

src/Scarlet.System.Text.Json.DateTimeConverter/JsonDateTimeConverterAttribute.cs

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,8 @@ public override JsonConverter CreateConverter(Type typeToConvert)
2525
{
2626
ArgumentNullException.ThrowIfNull(typeToConvert);
2727

28-
if (typeToConvert == typeof(DateTime))
29-
{
30-
return Converters.DateTimeConverter.FromFormat(Format);
31-
}
28+
var converter = DateTimeConverterFactoryHelper.CreateConverter(typeToConvert, Format);
3229

33-
if (typeToConvert == typeof(DateTime?))
34-
{
35-
return Converters.DateTimeNullableConverter.FromFormat(Format);
36-
}
37-
38-
if (typeToConvert == typeof(DateTimeOffset))
39-
{
40-
return Converters.DateTimeOffsetConverter.FromFormat(Format);
41-
}
42-
43-
if (typeToConvert == typeof(DateTimeOffset?))
44-
{
45-
return Converters.DateTimeOffsetNullableConverter.FromFormat(Format);
46-
}
47-
48-
throw new NotSupportedException($"{typeToConvert.FullName} is not supported by the {nameof(JsonDateTimeConverterAttribute)}.");
30+
return converter;
4931
}
5032
}

src/Scarlet.System.Text.Json.DateTimeConverter/JsonDateTimeFormatConverter.cs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,9 @@ public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializer
1818
ArgumentNullException.ThrowIfNull(typeToConvert);
1919

2020
var format = T.Format;
21+
var converter = DateTimeConverterFactoryHelper.CreateConverter(typeToConvert, format);
2122

22-
if (typeToConvert == typeof(DateTime))
23-
{
24-
return Converters.DateTimeConverter.FromFormat(format);
25-
}
26-
27-
if (typeToConvert == typeof(DateTime?))
28-
{
29-
return Converters.DateTimeNullableConverter.FromFormat(format);
30-
}
31-
32-
if (typeToConvert == typeof(DateTimeOffset))
33-
{
34-
return Converters.DateTimeOffsetConverter.FromFormat(format);
35-
}
36-
37-
if (typeToConvert == typeof(DateTimeOffset?))
38-
{
39-
return Converters.DateTimeOffsetNullableConverter.FromFormat(format);
40-
}
41-
42-
throw new NotSupportedException($"{typeToConvert.FullName} is not supported by the {nameof(JsonDateTimeConverterAttribute)}.");
23+
return converter;
4324
}
4425
}
4526

0 commit comments

Comments
 (0)