// Copyright (c) Arlo Godfrey. All Rights Reserved. // Licensed under the GNU Lesser General Public License, Version 3.0 with additional terms. // See the LICENSE, LICENSE.LESSER and LICENSE.ADDITIONAL files in the project root for more information. using System; using System.IO; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using OwlCore.Services; namespace StrixMusic.Sdk.Services { /// /// An and implementation for serializing and deserializing streams using System.Text.Json. /// public class SystemJsonStreamSerializer : IAsyncSerializer { /// /// A singleton instance for . /// public static SystemJsonStreamSerializer Singleton { get; } = new(); /// public async Task SerializeAsync(T data, CancellationToken? cancellationToken = null) { var stream = new MemoryStream(); await JsonSerializer.SerializeAsync(stream, data, cancellationToken: cancellationToken ?? CancellationToken.None); return stream; } /// public async Task SerializeAsync(Type inputType, object data, CancellationToken? cancellationToken = null) { var stream = new MemoryStream(); await JsonSerializer.SerializeAsync(stream, data, inputType, cancellationToken: cancellationToken ?? CancellationToken.None); return stream; } /// public Task DeserializeAsync(Stream serialized, CancellationToken? cancellationToken = null) => JsonSerializer.DeserializeAsync(serialized).AsTask()!; /// public Task DeserializeAsync(Type returnType, Stream serialized, CancellationToken? cancellationToken = null) => JsonSerializer.DeserializeAsync(serialized, returnType).AsTask()!; } }