using System.IO; using SabreTools.IO.Extensions; namespace SabreTools.Serialization.Writers { /// /// Base class for all binary serializers /// /// Type of the model to serialize /// /// This class allows all inheriting types to only implement /// and still implicitly implement and /// public abstract class BaseBinaryWriter : IByteWriter, IFileWriter, IStreamWriter { /// public bool Debug { get; set; } = false; #region IByteWriter /// public virtual byte[]? SerializeArray(TModel? obj) { using var stream = SerializeStream(obj); if (stream is null) return null; byte[] bytes = new byte[stream.Length]; int read = stream.Read(bytes, 0, bytes.Length); return bytes; } #endregion #region IFileWriter /// public virtual bool SerializeFile(TModel? obj, string? path) { if (string.IsNullOrEmpty(path)) return false; using var stream = SerializeStream(obj); if (stream is null) return false; using var fs = File.Open(path, FileMode.Create, FileAccess.Write, FileShare.None); stream.BlockCopy(fs); fs.Flush(); return true; } #endregion #region IStreamWriter /// public abstract Stream? SerializeStream(TModel? obj); #endregion } }