csharp/Microsoft.Azure.Databricks.Client/Converters/LibraryConverter.cs (68 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using Microsoft.Azure.Databricks.Client.Models;
using System;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
namespace Microsoft.Azure.Databricks.Client.Converters;
public class LibraryConverter : JsonConverter<Library>
{
public override bool CanConvert(Type typeToConvert)
{
return typeof(Library).IsAssignableFrom(typeToConvert);
}
public override bool HandleNull => true;
public override Library Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var library = JsonNode.Parse(ref reader)!.AsObject();
if (library.TryGetPropertyValue("jar", out _))
{
return library.Deserialize<JarLibrary>();
}
if (library.TryGetPropertyValue("egg", out _))
{
return library.Deserialize<EggLibrary>();
}
if (library.TryGetPropertyValue("whl", out _))
{
return library.Deserialize<WheelLibrary>();
}
if (library.TryGetPropertyValue("maven", out _))
{
return library.Deserialize<MavenLibrary>();
}
if (library.TryGetPropertyValue("pypi", out _))
{
return library.Deserialize<PythonPyPiLibrary>();
}
if (library.TryGetPropertyValue("cran", out _))
{
return library.Deserialize<RCranLibrary>();
}
if (library.TryGetPropertyValue("notebook", out _))
{
return library.Deserialize<NotebookLibrary>();
}
if (library.TryGetPropertyValue("file", out _))
{
return library.Deserialize<FileLibrary>();
}
throw new NotSupportedException("Library not recognized");
}
public override void Write(Utf8JsonWriter writer, Library value, JsonSerializerOptions options)
{
var node = value switch
{
JarLibrary jar => JsonSerializer.SerializeToNode(jar),
EggLibrary egg => JsonSerializer.SerializeToNode(egg),
WheelLibrary wheel => JsonSerializer.SerializeToNode(wheel),
MavenLibrary maven => JsonSerializer.SerializeToNode(maven),
PythonPyPiLibrary pypi => JsonSerializer.SerializeToNode(pypi),
RCranLibrary rcran => JsonSerializer.SerializeToNode(rcran),
NotebookLibrary ntbk => JsonSerializer.SerializeToNode(ntbk),
FileLibrary file => JsonSerializer.SerializeToNode(file),
_ => throw new NotImplementedException($"JsonConverter not implemented for type {value.GetType()}")
};
node!.WriteTo(writer);
}
}