Skip to content

Commit

Permalink
(#4) Replace Newtonsoft.Json with System.Text.Json
Browse files Browse the repository at this point in the history
  • Loading branch information
y0ung3r committed Jun 14, 2024
1 parent 2362471 commit 49480c3
Show file tree
Hide file tree
Showing 71 changed files with 4,338 additions and 4,266 deletions.
2 changes: 1 addition & 1 deletion src/ChromeProtocol.Core/ChromeProtocol.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json"/>
<PackageReference Include="System.Text.Json"/>
</ItemGroup>

</Project>
41 changes: 41 additions & 0 deletions src/ChromeProtocol.Core/PolymorphicTypeResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;

namespace ChromeProtocol.Core;

public sealed class PolymorphicTypeResolver : DefaultJsonTypeInfoResolver
{
private readonly Dictionary<Type, Type[]> _derivedTypes;

/// <inheritdoc />
public PolymorphicTypeResolver(Dictionary<Type, Type[]> derivedTypes)
=> _derivedTypes = derivedTypes;

public override JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions options)
{
var typeInfo = base.GetTypeInfo(type, options);

if (!_derivedTypes.TryGetValue(typeInfo.Type, out var implementations))
return typeInfo;

if (implementations.Length == 0)
return typeInfo;

var polymorphismOptions = new JsonPolymorphismOptions
{
// TypeDiscriminatorPropertyName = "$type",
IgnoreUnrecognizedTypeDiscriminators = true,
UnknownDerivedTypeHandling = JsonUnknownDerivedTypeHandling.FailSerialization
};

foreach (var derivedType in implementations.Select(implementation => new JsonDerivedType(implementation)))
{
polymorphismOptions.DerivedTypes.Add(derivedType);
}

typeInfo.PolymorphismOptions = polymorphismOptions;

return typeInfo;
}
}
26 changes: 15 additions & 11 deletions src/ChromeProtocol.Core/PrimitiveTypeConverter.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using ChromeProtocol.Core.Extensions;
using Newtonsoft.Json;

namespace ChromeProtocol.Core;

public class PrimitiveTypeConverter : JsonConverter
public class PrimitiveTypeConverter : JsonConverter<object>
{
static Type? GetValueType(Type objectType) =>
objectType
Expand All @@ -12,21 +13,24 @@ public class PrimitiveTypeConverter : JsonConverter
.Select(t => t.GetGenericArguments()[0])
.FirstOrDefault();

public override bool CanConvert(Type objectType) => GetValueType(objectType) != null;
public override bool CanConvert(Type objectType)
=> GetValueType(objectType) != null;

public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
/// <inheritdoc />
public override object? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonToken.Null)
return Activator.CreateInstance(objectType, null);
var valueType = GetValueType(typeToConvert);

var valueType = GetValueType(objectType);
var value = serializer.Deserialize(reader, valueType);
if (reader.TokenType == JsonTokenType.Null || valueType is null)
return Activator.CreateInstance(typeToConvert, null);

return Activator.CreateInstance(objectType, value);
var value = JsonSerializer.Deserialize(ref reader, valueType, options);
return Activator.CreateInstance(typeToConvert, value);
}

public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
/// <inheritdoc />
public override void Write(Utf8JsonWriter writer, object? value, JsonSerializerOptions options)
{
serializer.Serialize(writer, ((IPrimitiveType?)value)?.RawValue);
JsonSerializer.Serialize(writer, ((IPrimitiveType?)value)?.RawValue);
}
}
140 changes: 70 additions & 70 deletions src/ChromeProtocol.Domains/Generated/Accessibility.cs

Large diffs are not rendered by default.

114 changes: 57 additions & 57 deletions src/ChromeProtocol.Domains/Generated/Animation.cs

Large diffs are not rendered by default.

292 changes: 146 additions & 146 deletions src/ChromeProtocol.Domains/Generated/Audits.cs

Large diffs are not rendered by default.

58 changes: 29 additions & 29 deletions src/ChromeProtocol.Domains/Generated/Autofill.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,39 @@ public static partial class Autofill
/// <param name="ExpiryYear">4-digit expiry year.</param>
/// <param name="Cvc">3-digit card verification code.</param>
public record CreditCardType(
[property: Newtonsoft.Json.JsonProperty("number")]
[property: System.Text.Json.Serialization.JsonPropertyName("number")]
string Number,
[property: Newtonsoft.Json.JsonProperty("name")]
[property: System.Text.Json.Serialization.JsonPropertyName("name")]
string Name,
[property: Newtonsoft.Json.JsonProperty("expiryMonth")]
[property: System.Text.Json.Serialization.JsonPropertyName("expiryMonth")]
string ExpiryMonth,
[property: Newtonsoft.Json.JsonProperty("expiryYear")]
[property: System.Text.Json.Serialization.JsonPropertyName("expiryYear")]
string ExpiryYear,
[property: Newtonsoft.Json.JsonProperty("cvc")]
[property: System.Text.Json.Serialization.JsonPropertyName("cvc")]
string Cvc
) : ChromeProtocol.Core.IType
{
}
/// <param name="Name">address field name, for example GIVEN_NAME.</param>
/// <param name="Value">address field value, for example Jon Doe.</param>
public record AddressFieldType(
[property: Newtonsoft.Json.JsonProperty("name")]
[property: System.Text.Json.Serialization.JsonPropertyName("name")]
string Name,
[property: Newtonsoft.Json.JsonProperty("value")]
[property: System.Text.Json.Serialization.JsonPropertyName("value")]
string Value
) : ChromeProtocol.Core.IType
{
}
/// <summary>A list of address fields.</summary>
public record AddressFieldsType(
[property: Newtonsoft.Json.JsonProperty("fields")]
[property: System.Text.Json.Serialization.JsonPropertyName("fields")]
System.Collections.Generic.IReadOnlyList<ChromeProtocol.Domains.Autofill.AddressFieldType> Fields
) : ChromeProtocol.Core.IType
{
}
/// <param name="Fields">fields and values defining an address.</param>
public record AddressType(
[property: Newtonsoft.Json.JsonProperty("fields")]
[property: System.Text.Json.Serialization.JsonPropertyName("fields")]
System.Collections.Generic.IReadOnlyList<ChromeProtocol.Domains.Autofill.AddressFieldType> Fields
) : ChromeProtocol.Core.IType
{
Expand All @@ -60,13 +60,13 @@ public record AddressType(
/// </summary>
/// <param name="AddressFields">A two dimension array containing the representation of values from an address profile.</param>
public record AddressUIType(
[property: Newtonsoft.Json.JsonProperty("addressFields")]
[property: System.Text.Json.Serialization.JsonPropertyName("addressFields")]
System.Collections.Generic.IReadOnlyList<ChromeProtocol.Domains.Autofill.AddressFieldsType> AddressFields
) : ChromeProtocol.Core.IType
{
}
/// <summary>Specified whether a filled field was done so by using the html autocomplete attribute or autofill heuristics.</summary>
[Newtonsoft.Json.JsonConverter(typeof(ChromeProtocol.Core.PrimitiveTypeConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(ChromeProtocol.Core.PrimitiveTypeConverter))]
public record FillingStrategyType(
string Value
) : ChromeProtocol.Core.PrimitiveType<string>(Value)
Expand All @@ -81,21 +81,21 @@ string Value
/// <param name="FrameId">The frame the field belongs to</param>
/// <param name="FieldId">The form field&#39;s DOM node</param>
public record FilledFieldType(
[property: Newtonsoft.Json.JsonProperty("htmlType")]
[property: System.Text.Json.Serialization.JsonPropertyName("htmlType")]
string HtmlType,
[property: Newtonsoft.Json.JsonProperty("id")]
[property: System.Text.Json.Serialization.JsonPropertyName("id")]
string Id,
[property: Newtonsoft.Json.JsonProperty("name")]
[property: System.Text.Json.Serialization.JsonPropertyName("name")]
string Name,
[property: Newtonsoft.Json.JsonProperty("value")]
[property: System.Text.Json.Serialization.JsonPropertyName("value")]
string Value,
[property: Newtonsoft.Json.JsonProperty("autofillType")]
[property: System.Text.Json.Serialization.JsonPropertyName("autofillType")]
string AutofillType,
[property: Newtonsoft.Json.JsonProperty("fillingStrategy")]
[property: System.Text.Json.Serialization.JsonPropertyName("fillingStrategy")]
ChromeProtocol.Domains.Autofill.FillingStrategyType FillingStrategy,
[property: Newtonsoft.Json.JsonProperty("frameId")]
[property: System.Text.Json.Serialization.JsonPropertyName("frameId")]
ChromeProtocol.Domains.Page.FrameIdType FrameId,
[property: Newtonsoft.Json.JsonProperty("fieldId")]
[property: System.Text.Json.Serialization.JsonPropertyName("fieldId")]
ChromeProtocol.Domains.DOM.BackendNodeIdType FieldId
) : ChromeProtocol.Core.IType
{
Expand All @@ -108,9 +108,9 @@ ChromeProtocol.Domains.DOM.BackendNodeIdType FieldId
/// </param>
[ChromeProtocol.Core.MethodName("Autofill.addressFormFilled")]
public record AddressFormFilled(
[property: Newtonsoft.Json.JsonProperty("filledFields")]
[property: System.Text.Json.Serialization.JsonPropertyName("filledFields")]
System.Collections.Generic.IReadOnlyList<ChromeProtocol.Domains.Autofill.FilledFieldType> FilledFields,
[property: Newtonsoft.Json.JsonProperty("addressUi")]
[property: System.Text.Json.Serialization.JsonPropertyName("addressUi")]
ChromeProtocol.Domains.Autofill.AddressUIType AddressUi
) : ChromeProtocol.Core.IEvent
{
Expand All @@ -122,7 +122,7 @@ ChromeProtocol.Domains.Autofill.AddressUIType AddressUi
/// <param name="FieldId">Identifies a field that serves as an anchor for autofill.</param>
/// <param name="Card">Credit card information to fill out the form. Credit card data is not saved.</param>
/// <param name="FrameId">Identifies the frame that field belongs to.</param>
public static ChromeProtocol.Domains.Autofill.TriggerRequest Trigger(ChromeProtocol.Domains.DOM.BackendNodeIdType FieldId, ChromeProtocol.Domains.Autofill.CreditCardType Card, ChromeProtocol.Domains.Page.FrameIdType? FrameId = default)
public static ChromeProtocol.Domains.Autofill.TriggerRequest Trigger(ChromeProtocol.Domains.DOM.BackendNodeIdType FieldId, ChromeProtocol.Domains.Autofill.CreditCardType Card, ChromeProtocol.Domains.Page.FrameIdType? FrameId = default)
{
return new ChromeProtocol.Domains.Autofill.TriggerRequest(FieldId, Card, FrameId);
}
Expand All @@ -135,11 +135,11 @@ public static ChromeProtocol.Domains.Autofill.TriggerRequest Trigger(ChromeProto
/// <param name="FrameId">Identifies the frame that field belongs to.</param>
[ChromeProtocol.Core.MethodName("Autofill.trigger")]
public record TriggerRequest(
[property: Newtonsoft.Json.JsonProperty("fieldId")]
[property: System.Text.Json.Serialization.JsonPropertyName("fieldId")]
ChromeProtocol.Domains.DOM.BackendNodeIdType FieldId,
[property: Newtonsoft.Json.JsonProperty("card")]
[property: System.Text.Json.Serialization.JsonPropertyName("card")]
ChromeProtocol.Domains.Autofill.CreditCardType Card,
[property: Newtonsoft.Json.JsonProperty("frameId")]
[property: System.Text.Json.Serialization.JsonPropertyName("frameId")]
ChromeProtocol.Domains.Page.FrameIdType? FrameId = default
) : ChromeProtocol.Core.ICommand<TriggerRequestResult>
{
Expand All @@ -148,14 +148,14 @@ public record TriggerRequestResult() : ChromeProtocol.Core.IType
{
}
/// <summary>Set addresses so that developers can verify their forms implementation.</summary>
public static ChromeProtocol.Domains.Autofill.SetAddressesRequest SetAddresses(System.Collections.Generic.IReadOnlyList<ChromeProtocol.Domains.Autofill.AddressType> Addresses)
public static ChromeProtocol.Domains.Autofill.SetAddressesRequest SetAddresses(System.Collections.Generic.IReadOnlyList<ChromeProtocol.Domains.Autofill.AddressType> Addresses)
{
return new ChromeProtocol.Domains.Autofill.SetAddressesRequest(Addresses);
}
/// <summary>Set addresses so that developers can verify their forms implementation.</summary>
[ChromeProtocol.Core.MethodName("Autofill.setAddresses")]
public record SetAddressesRequest(
[property: Newtonsoft.Json.JsonProperty("addresses")]
[property: System.Text.Json.Serialization.JsonPropertyName("addresses")]
System.Collections.Generic.IReadOnlyList<ChromeProtocol.Domains.Autofill.AddressType> Addresses
) : ChromeProtocol.Core.ICommand<SetAddressesRequestResult>
{
Expand All @@ -164,7 +164,7 @@ public record SetAddressesRequestResult() : ChromeProtocol.Core.IType
{
}
/// <summary>Disables autofill domain notifications.</summary>
public static ChromeProtocol.Domains.Autofill.DisableRequest Disable()
public static ChromeProtocol.Domains.Autofill.DisableRequest Disable()
{
return new ChromeProtocol.Domains.Autofill.DisableRequest();
}
Expand All @@ -177,7 +177,7 @@ public record DisableRequestResult() : ChromeProtocol.Core.IType
{
}
/// <summary>Enables autofill domain notifications.</summary>
public static ChromeProtocol.Domains.Autofill.EnableRequest Enable()
public static ChromeProtocol.Domains.Autofill.EnableRequest Enable()
{
return new ChromeProtocol.Domains.Autofill.EnableRequest();
}
Expand Down
Loading

0 comments on commit 49480c3

Please sign in to comment.