// Copyright © 2021 The CefSharp Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace CefSharp.Internals.Json
{
///
/// System.Text.Json Enum Converter for the DevToolsClient
/// Only handles enums as strings and converts from .Net naming
/// to the naming convention used by DevTools protocol
///
/// type
///
/// There aren't any Type constraints on T currently, we just rely on the
/// to only use this for
/// Enum and Nullable Enum
///
public class JsonEnumConverter : JsonConverter
{
///
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var nullableType = Nullable.GetUnderlyingType(typeToConvert);
var val = reader.GetString();
if (nullableType == null)
{
return (T)JsonEnumConverterFactory.ConvertStringToEnum(val, typeToConvert);
}
if(string.IsNullOrEmpty(val))
{
return default;
}
return (T)JsonEnumConverterFactory.ConvertStringToEnum(val, nullableType);
}
///
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
{
//Not called when the Nullable enum value is null so we don't need to perform any sort of null checking
var str = JsonEnumConverterFactory.ConvertEnumToString(value);
writer.WriteStringValue(str);
}
}
}