csharp/Microsoft.Azure.Databricks.Client/Converters/InitScriptInfoConverter.cs (67 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using System;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
using Microsoft.Azure.Databricks.Client.Models;
namespace Microsoft.Azure.Databricks.Client.Converters;
public class InitScriptInfoConverter : JsonConverter<InitScriptInfo>
{
public override InitScriptInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var info = JsonNode.Parse(ref reader)!.AsObject();
if (info.TryGetPropertyValue("workspace", out var workspace))
{
return new InitScriptInfo
{
StorageDestination = workspace.Deserialize<WorkspaceStorageInfo>()
};
}
if (info.TryGetPropertyValue("dbfs", out var dbfs))
{
return new InitScriptInfo
{
StorageDestination = dbfs.Deserialize<DbfsStorageInfo>()
};
}
if (info.TryGetPropertyValue("abfss", out var abfss))
{
return new InitScriptInfo
{
StorageDestination = abfss.Deserialize<AbfssStorageInfo>()
};
}
if (info.TryGetPropertyValue("volumes", out var volumes))
{
return new InitScriptInfo
{
StorageDestination = volumes.Deserialize<VolumesStorageInfo>()
};
}
throw new NotSupportedException($"Storage destination not recognized: {info}");
}
public override void Write(Utf8JsonWriter writer, InitScriptInfo value, JsonSerializerOptions options)
{
var node = value.StorageDestination switch
{
DbfsStorageInfo dbfs => new JsonObject
{
["dbfs"] = JsonSerializer.SerializeToNode(dbfs)
},
AbfssStorageInfo abfss => new JsonObject
{
["abfss"] = JsonSerializer.SerializeToNode(abfss)
},
WorkspaceStorageInfo workspace => new JsonObject
{
["workspace"] = JsonSerializer.SerializeToNode(workspace)
},
VolumesStorageInfo volumes => new JsonObject
{
["volumes"] = JsonSerializer.SerializeToNode(volumes)
},
_ => throw new NotImplementedException($"JsonConverter not implemented for type {value.GetType()}")
};
node!.WriteTo(writer);
}
}