Skip to content

Commit a32c695

Browse files
authored
Make Utilities.Introspection AOT compatible (#8872)
1 parent 5a926fa commit a32c695

File tree

5 files changed

+36
-8
lines changed

5 files changed

+36
-8
lines changed

src/HotChocolate/Utilities/src/Utilities.DependencyInjection/HotChocolate.Utilities.DependencyInjection.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
<Description>Contains internal helper classes for Microsoft's dependency injection used by the Hot Chocolate GraphQL type system and the GraphQL query execution engine.</Description>
88
</PropertyGroup>
99

10+
<PropertyGroup>
11+
<IsAotCompliant>true</IsAotCompliant>
12+
</PropertyGroup>
13+
1014
<ItemGroup>
1115
<InternalsVisibleTo Include="HotChocolate.AspNetCore" />
1216
<InternalsVisibleTo Include="HotChocolate.Execution" />

src/HotChocolate/Utilities/src/Utilities.Introspection/HotChocolate.Utilities.Introspection.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
<Description>Contains an introspection client to download a GraphQL schema over HTTP.</Description>
88
</PropertyGroup>
99

10+
<PropertyGroup>
11+
<IsAotCompliant>true</IsAotCompliant>
12+
</PropertyGroup>
13+
1014
<ItemGroup>
1115
<InternalsVisibleTo Include="HotChocolate.Utilities.Introspection.Tests" />
1216
</ItemGroup>

src/HotChocolate/Utilities/src/Utilities.Introspection/IntrospectionClient.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Text;
22
using System.Text.Json;
3-
using System.Text.Json.Serialization;
43
using HotChocolate.Language;
54
using HotChocolate.Transport.Http;
65
using static HotChocolate.Utilities.Introspection.CapabilityInspector;
@@ -13,11 +12,8 @@ namespace HotChocolate.Utilities.Introspection;
1312
/// </summary>
1413
public static class IntrospectionClient
1514
{
16-
private static readonly JsonSerializerOptions s_serializerOptions = new()
17-
{
18-
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
19-
Converters = { new JsonStringEnumConverter() }
20-
};
15+
private static readonly JsonSerializerOptions s_serializerOptions =
16+
new(IntrospectionJsonSerializerContext.Default.Options);
2117

2218
internal static JsonSerializerOptions SerializerOptions => s_serializerOptions;
2319

@@ -245,12 +241,12 @@ private static async Task<IntrospectionResult> IntrospectAsync(
245241

246242
if (result.Data.ValueKind is JsonValueKind.Object)
247243
{
248-
data = result.Data.Deserialize<IntrospectionData>(s_serializerOptions);
244+
data = result.Data.Deserialize(IntrospectionJsonSerializerContext.Default.IntrospectionData);
249245
}
250246

251247
if (result.Errors.ValueKind is JsonValueKind.Array)
252248
{
253-
errors = result.Errors.Deserialize<IntrospectionError[]>(s_serializerOptions);
249+
errors = result.Errors.Deserialize(IntrospectionJsonSerializerContext.Default.IntrospectionErrorArray);
254250
}
255251

256252
return new IntrospectionResult(data, errors);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace HotChocolate.Utilities.Introspection;
4+
5+
[JsonSourceGenerationOptions(
6+
PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase,
7+
DefaultIgnoreCondition = JsonIgnoreCondition.Never)]
8+
[JsonSerializable(typeof(IntrospectionResult))]
9+
[JsonSerializable(typeof(IntrospectionData))]
10+
[JsonSerializable(typeof(IntrospectionError))]
11+
[JsonSerializable(typeof(IntrospectionError[]))]
12+
[JsonSerializable(typeof(Schema))]
13+
[JsonSerializable(typeof(FullType))]
14+
[JsonSerializable(typeof(Field))]
15+
[JsonSerializable(typeof(InputField))]
16+
[JsonSerializable(typeof(Directive))]
17+
[JsonSerializable(typeof(TypeRef))]
18+
[JsonSerializable(typeof(RootTypeRef))]
19+
[JsonSerializable(typeof(EnumValue))]
20+
[JsonSerializable(typeof(TypeKind))]
21+
internal sealed partial class IntrospectionJsonSerializerContext : JsonSerializerContext;

src/HotChocolate/Utilities/src/Utilities.Introspection/Models/TypeKind.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
#nullable disable
22

3+
using System.Text.Json.Serialization;
4+
35
namespace HotChocolate.Utilities.Introspection;
46

7+
[JsonConverter(typeof(JsonStringEnumConverter<TypeKind>))]
58
public enum TypeKind
69
{
710
INTERFACE = 0,

0 commit comments

Comments
 (0)