Files
se-launcher/NuGet/Converters/FrameworkJsonConverter.cs
zznty aa979e9519
All checks were successful
Build / Compute Version (push) Successful in 4s
Build / Build Nuget package (CringeBootstrap.Abstractions) (push) Successful in 2m47s
Build / Build Nuget package (CringePlugins) (push) Successful in 5m31s
Build / Build Nuget package (NuGet) (push) Successful in 6m2s
Build / Build Nuget package (SharedCringe) (push) Successful in 7m25s
Build / Build Launcher (push) Successful in 9m11s
feature: first
2024-10-28 05:21:11 +07:00

59 lines
1.9 KiB
C#

using System.Text.Json;
using System.Text.Json.Serialization;
using NuGet.Frameworks;
namespace NuGet.Converters;
public class FrameworkJsonConverter(FrameworkNameFormat format) : JsonConverter<NuGetFramework>
{
public override NuGetFramework Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType != JsonTokenType.String)
throw new JsonException("Invalid framework string");
var s = reader.GetString()!;
return format switch
{
FrameworkNameFormat.ShortFolderName => NuGetFramework.ParseFolder(s),
FrameworkNameFormat.FrameworkName => NuGetFramework.ParseFrameworkName(s,
DefaultFrameworkNameProvider.Instance),
_ => throw new ArgumentOutOfRangeException()
};
}
public override void Write(Utf8JsonWriter writer, NuGetFramework value, JsonSerializerOptions options)
{
writer.WriteStringValue(FormatValue(value));
}
private string FormatValue(NuGetFramework value)
{
return format switch
{
FrameworkNameFormat.ShortFolderName => value.GetShortFolderName(),
FrameworkNameFormat.FrameworkName => value.DotNetFrameworkName,
_ => throw new ArgumentOutOfRangeException()
};
}
public override NuGetFramework ReadAsPropertyName(ref Utf8JsonReader reader, Type typeToConvert,
JsonSerializerOptions options) => Read(ref reader, typeToConvert, options);
public override void WriteAsPropertyName(Utf8JsonWriter writer, NuGetFramework value,
JsonSerializerOptions options)
{
writer.WritePropertyName(FormatValue(value));
}
}
public enum FrameworkNameFormat
{
/// <summary>
/// The short folder name format (net8.0)
/// </summary>
ShortFolderName,
/// <summary>
/// Full framework name (.NETCoreApp,Version=v8.0)
/// </summary>
FrameworkName
}