Skip to content

Commit a80c995

Browse files
committed
add constant case enum converters for both serializers
1 parent 0c2deb8 commit a80c995

File tree

11 files changed

+48
-11
lines changed

11 files changed

+48
-11
lines changed

src/GraphQL.Client.LocalExecution/GraphQL.Client.LocalExecution.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
<ItemGroup>
1717
<ProjectReference Include="..\GraphQL.Client.Abstractions\GraphQL.Client.Abstractions.csproj" />
18+
<ProjectReference Include="..\GraphQL.Client.Serializer.Newtonsoft\GraphQL.Client.Serializer.Newtonsoft.csproj" />
1819
</ItemGroup>
1920

2021
</Project>

src/GraphQL.Client.LocalExecution/GraphQLLocalExecutionClient.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading;
99
using System.Threading.Tasks;
1010
using GraphQL.Client.Abstractions;
11+
using GraphQL.Client.Serializer.Newtonsoft;
1112
using GraphQL.Subscription;
1213
using GraphQL.Types;
1314
using Newtonsoft.Json;
@@ -31,7 +32,7 @@ public class GraphQLLocalExecutionClient<TSchema> : IGraphQLClient where TSchema
3132
ContractResolver = new CamelCasePropertyNamesContractResolver(),
3233
Converters = new List<JsonConverter>
3334
{
34-
new GraphQLEnumConverter()
35+
new ConstantCaseEnumConverter()
3536
}
3637
};
3738

@@ -50,7 +51,7 @@ public GraphQLLocalExecutionClient(TSchema schema, IGraphQLJsonSerializer serial
5051
Schema.Initialize();
5152
_documentExecuter = new DocumentExecuter();
5253
}
53-
54+
5455
public void Dispose() { }
5556

5657
public Task<GraphQLResponse<TResponse>> SendQueryAsync<TResponse>(GraphQLRequest request, CancellationToken cancellationToken = default)
@@ -80,7 +81,7 @@ private async Task<IObservable<GraphQLResponse<TResponse>>> ExecuteSubscriptionA
8081
{
8182
var result = await ExecuteAsync(request, cancellationToken);
8283
var stream = ((SubscriptionExecutionResult)result).Streams?.Values.SingleOrDefault();
83-
84+
8485
return stream == null
8586
? Observable.Throw<GraphQLResponse<TResponse>>(new InvalidOperationException("the GraphQL execution did not return an observable"))
8687
: stream.SelectMany(executionResult => Observable.FromAsync(token => ExecutionResultToGraphQLResponse<TResponse>(executionResult, token)));

src/GraphQL.Client.LocalExecution/GraphQLEnumConverter.cs renamed to src/GraphQL.Client.Serializer.Newtonsoft/ConstantCaseEnumConverter.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
using System;
22
using System.Linq;
33
using System.Reflection;
4-
using GraphQL.Utilities;
54
using Newtonsoft.Json;
65
using Newtonsoft.Json.Converters;
6+
using Panic.StringUtils.Extensions;
77

8-
namespace GraphQL.Client.LocalExecution
8+
namespace GraphQL.Client.Serializer.Newtonsoft
99
{
10-
public class GraphQLEnumConverter : StringEnumConverter
10+
public class ConstantCaseEnumConverter : StringEnumConverter
1111
{
1212
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
1313
{
@@ -29,7 +29,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
2929
}
3030
else
3131
{
32-
writer.WriteValue(StringUtils.ToConstantCase(memberName));
32+
writer.WriteValue(memberName.ToConstantCase());
3333
}
3434
}
3535
}

src/GraphQL.Client.Serializer.Newtonsoft/GraphQL.Client.Serializer.Newtonsoft.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
<ItemGroup>
1111
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
12+
<PackageReference Include="Panic.StringUtils" Version="1.0.1" />
1213
</ItemGroup>
1314

1415
<ItemGroup>

src/GraphQL.Client.Serializer.Newtonsoft/NewtonsoftJsonSerializer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ public class NewtonsoftJsonSerializer : IGraphQLWebsocketJsonSerializer
1515
public static JsonSerializerSettings DefaultJsonSerializerSettings => new JsonSerializerSettings
1616
{
1717
ContractResolver = new CamelCasePropertyNamesContractResolver { IgnoreIsSpecifiedMembers = true },
18-
MissingMemberHandling = MissingMemberHandling.Ignore
18+
MissingMemberHandling = MissingMemberHandling.Ignore,
19+
Converters = { new ConstantCaseEnumConverter() }
1920
};
2021

2122
public JsonSerializerSettings JsonSerializerSettings { get; }
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Text.Json;
2+
using Panic.StringUtils.Extensions;
3+
4+
namespace GraphQL.Client.Serializer.SystemTextJson
5+
{
6+
public class ConstantCaseJsonNamingPolicy: JsonNamingPolicy
7+
{
8+
public override string ConvertName(string name) => name.ToConstantCase();
9+
}
10+
}

src/GraphQL.Client.Serializer.SystemTextJson/GraphQL.Client.Serializer.SystemTextJson.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@
1515
<ProjectReference Include="..\GraphQL.Client.Abstractions.Websocket\GraphQL.Client.Abstractions.Websocket.csproj" />
1616
</ItemGroup>
1717

18+
<ItemGroup>
19+
<PackageReference Include="Panic.StringUtils" Version="1.0.1" />
20+
</ItemGroup>
21+
1822
</Project>

src/GraphQL.Client.Serializer.SystemTextJson/SystemTextJsonSerializer.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.IO;
33
using System.Text.Json;
4+
using System.Text.Json.Serialization;
45
using System.Threading;
56
using System.Threading.Tasks;
67
using GraphQL.Client.Abstractions;
@@ -12,7 +13,8 @@ public class SystemTextJsonSerializer : IGraphQLWebsocketJsonSerializer
1213
{
1314
public static JsonSerializerOptions DefaultJsonSerializerOptions => new JsonSerializerOptions
1415
{
15-
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
16+
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
17+
Converters = { new JsonStringEnumConverter(new ConstantCaseJsonNamingPolicy(), false)}
1618
}.SetupImmutableConverter();
1719

1820
public JsonSerializerOptions Options { get; }

tests/GraphQL.Client.Serializer.Tests/NewtonsoftSerializerTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ public NewtonsoftSerializerTest() : base(new NewtonsoftJsonSerializer()) { }
1111
public class NewtonsoftSerializeNoCamelCaseTest : BaseSerializeNoCamelCaseTest
1212
{
1313
public NewtonsoftSerializeNoCamelCaseTest()
14-
: base(new NewtonsoftJsonSerializer(new JsonSerializerSettings())) { }
14+
: base(new NewtonsoftJsonSerializer(new JsonSerializerSettings(){ Converters = { new ConstantCaseEnumConverter() } })) { }
1515
}
1616
}

tests/GraphQL.Client.Serializer.Tests/SystemTextJsonSerializerTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text.Json;
2+
using System.Text.Json.Serialization;
23
using GraphQL.Client.Serializer.SystemTextJson;
34

45
namespace GraphQL.Client.Serializer.Tests
@@ -11,6 +12,6 @@ public SystemTextJsonSerializerTests() : base(new SystemTextJsonSerializer()) {
1112
public class SystemTextJsonSerializeNoCamelCaseTest : BaseSerializeNoCamelCaseTest
1213
{
1314
public SystemTextJsonSerializeNoCamelCaseTest()
14-
: base(new SystemTextJsonSerializer(new JsonSerializerOptions().SetupImmutableConverter())) { }
15+
: base(new SystemTextJsonSerializer(new JsonSerializerOptions(){Converters = { new JsonStringEnumConverter(new ConstantCaseJsonNamingPolicy(), false)}}.SetupImmutableConverter())) { }
1516
}
1617
}

0 commit comments

Comments
 (0)