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
}
}