Skip to content

Commit a79d7a6

Browse files
committed
improving source generator
1 parent 90038ac commit a79d7a6

13 files changed

+1093
-166
lines changed

sample/Futurum.WebApiEndpoint.Micro.Sample/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Futurum.Microsoft.Extensions.DependencyInjection;
22
using Futurum.WebApiEndpoint.Micro;
33
using Futurum.WebApiEndpoint.Micro.Sample;
4+
using Futurum.WebApiEndpoint.Micro.Sample.Addition;
45

56
using Microsoft.OpenApi.Models;
67

@@ -32,7 +33,7 @@
3233
}
3334
}
3435
})
35-
.AddWebApiEndpointsForFuturumWebApiEndpointMicroSampleBlog()
36+
.AddWebApiEndpointsForFuturumWebApiEndpointMicroSample()
3637
.AddWebApiEndpointsForFuturumWebApiEndpointMicroSampleAddition();
3738

3839
var app = builder.Build();
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using System.Collections;
2+
3+
namespace Futurum.WebApiEndpoint.Micro.Generator.Core;
4+
5+
public readonly struct EquatableArray<T> : IEquatable<EquatableArray<T>>, IEnumerable<T>
6+
where T : IEquatable<T>
7+
{
8+
public static readonly EquatableArray<T> Empty = new(Array.Empty<T>());
9+
10+
private readonly T[] _array;
11+
12+
public EquatableArray(T[] array)
13+
{
14+
_array = array;
15+
}
16+
17+
public EquatableArray(IEnumerable<T>? array)
18+
{
19+
array ??= Enumerable.Empty<T>();
20+
_array = array.ToArray();
21+
}
22+
23+
public bool Equals(EquatableArray<T> array) =>
24+
AsSpan().SequenceEqual(array.AsSpan());
25+
26+
public override bool Equals(object obj) =>
27+
obj is EquatableArray<T> array && Equals(array);
28+
29+
public override int GetHashCode()
30+
{
31+
if (_array is null)
32+
return 0;
33+
34+
HashCode hashCode = default;
35+
36+
foreach (var item in _array)
37+
hashCode.Add(item);
38+
39+
return hashCode.ToHashCode();
40+
}
41+
42+
private ReadOnlySpan<T> AsSpan() =>
43+
_array.AsSpan();
44+
45+
IEnumerator<T> IEnumerable<T>.GetEnumerator()
46+
{
47+
IEnumerable<T> array = _array ?? Array.Empty<T>();
48+
return array.GetEnumerator();
49+
}
50+
51+
IEnumerator IEnumerable.GetEnumerator()
52+
{
53+
IEnumerable<T> array = _array ?? Array.Empty<T>();
54+
return array.GetEnumerator();
55+
}
56+
57+
public int Count =>
58+
_array?.Length ?? 0;
59+
60+
public static bool operator ==(EquatableArray<T> left, EquatableArray<T> right) =>
61+
left.Equals(right);
62+
63+
public static bool operator !=(EquatableArray<T> left, EquatableArray<T> right) =>
64+
!left.Equals(right);
65+
}

0 commit comments

Comments
 (0)