Add byte deserializers for remaining stream deserializers

This commit is contained in:
Matt Nadareski
2024-04-03 23:25:54 -04:00
parent 3cb880ff3f
commit bee6c0ba11
11 changed files with 312 additions and 2 deletions

View File

@@ -9,6 +9,7 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class AttractMode :
IByteDeserializer<MetadataFile>,
IFileDeserializer<MetadataFile>,
IStreamDeserializer<MetadataFile>
{
@@ -20,6 +21,33 @@ namespace SabreTools.Serialization.Deserializers
#endregion
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static MetadataFile? DeserializeBytes(byte[]? data, int offset)
{
var deserializer = new AttractMode();
return deserializer.Deserialize(data, offset);
}
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -6,6 +6,21 @@ namespace SabreTools.Serialization.Deserializers
public class Catalog :
JsonFile<Models.Xbox.Catalog>
{
#region IByteDeserializer
/// <inheritdoc cref="Interfaces.IByteDeserializer.Deserialize(byte[]?, int)"/>
public static Models.Xbox.Catalog? DeserializeBytes(byte[]? data, int offset)
{
var deserializer = new Catalog();
return deserializer.Deserialize(data, offset);
}
/// <remarks>Catalog.js file is encoded as UTF-16 LE</remarks>
public override Models.Xbox.Catalog? Deserialize(byte[]? data, int offset)
=> Deserialize(data, offset, new UnicodeEncoding());
#endregion
#region IFileDeserializer
/// <inheritdoc cref="Interfaces.IFileDeserializer.Deserialize(string?)"/>

View File

@@ -9,9 +9,41 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class ClrMamePro :
IByteDeserializer<MetadataFile>,
IFileDeserializer<MetadataFile>,
IStreamDeserializer<MetadataFile>
{
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static MetadataFile? DeserializeBytes(byte[]? data, int offset, bool quotes = true)
{
var deserializer = new ClrMamePro();
return deserializer.Deserialize(data, offset, quotes);
}
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset)
=> Deserialize(data, offset, true);
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset, bool quotes)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream, quotes);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -10,9 +10,37 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class CueSheet :
IByteDeserializer<Models.CueSheets.CueSheet>,
IFileDeserializer<Models.CueSheets.CueSheet>,
IStreamDeserializer<Models.CueSheets.CueSheet>
{
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static Models.CueSheets.CueSheet? DeserializeBytes(byte[]? data, int offset)
{
var deserializer = new CueSheet();
return deserializer.Deserialize(data, offset);
}
/// <inheritdoc/>
public Models.CueSheets.CueSheet? Deserialize(byte[]? data, int offset)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -8,9 +8,37 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class DosCenter :
IByteDeserializer<MetadataFile>,
IFileDeserializer<MetadataFile>,
IStreamDeserializer<MetadataFile>
{
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static MetadataFile? DeserializeBytes(byte[]? data, int offset)
{
var deserializer = new DosCenter();
return deserializer.Deserialize(data, offset);
}
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -9,9 +9,37 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class EverdriveSMDB :
IByteDeserializer<MetadataFile>,
IFileDeserializer<MetadataFile>,
IStreamDeserializer<MetadataFile>
{
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static MetadataFile? DeserializeBytes(byte[]? data, int offset)
{
var deserializer = new EverdriveSMDB();
return deserializer.Deserialize(data, offset);
}
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -6,13 +6,44 @@ using SabreTools.Hashing;
using SabreTools.Models.Hashfile;
using SabreTools.Serialization.Interfaces;
// TODO: Replace use of Serialization.Hash with Hashing.HashType
namespace SabreTools.Serialization.Deserializers
{
public class Hashfile :
IByteDeserializer<Models.Hashfile.Hashfile>,
IFileDeserializer<Models.Hashfile.Hashfile>,
IStreamDeserializer<Models.Hashfile.Hashfile>
{
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static Models.Hashfile.Hashfile? DeserializeBytes(byte[]? data, int offset, HashType hash = HashType.CRC32)
{
var deserializer = new Hashfile();
return deserializer.Deserialize(data, offset, hash);
}
/// <inheritdoc/>
public Models.Hashfile.Hashfile? Deserialize(byte[]? data, int offset)
=> Deserialize(data, offset, HashType.CRC32);
/// <inheritdoc/>
public Models.Hashfile.Hashfile? Deserialize(byte[]? data, int offset, HashType hash)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream, hash);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -10,9 +10,41 @@ namespace SabreTools.Serialization.Deserializers
/// </summary>
/// <typeparam name="T"></typeparam>
public class JsonFile<T> :
IByteDeserializer<T>,
IFileDeserializer<T>,
IStreamDeserializer<T>
{
#region IByteDeserializer
/// <inheritdoc/>
public virtual T? Deserialize(byte[]? data, int offset)
=> Deserialize(data, offset, new UTF8Encoding(false));
/// <summary>
/// Deserialize a byte array into <typeparamref name="T"/>
/// </summary>
/// <typeparam name="T">Type of object to deserialize to</typeparam>
/// <param name="data">Byte array to parse</param>
/// <param name="offset">Offset into the byte array</param>
/// <param name="encoding">Encoding to parse text as</param>
/// <returns>Filled object on success, null on error</returns>
public T? Deserialize(byte[]? data, int offset, Encoding encoding)
{
// If the data is invalid
if (data == null)
return default;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return default;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return Deserialize(dataStream, encoding);
}
#endregion
#region IFileDeserializer
/// <inheritdoc/>
@@ -33,7 +65,7 @@ namespace SabreTools.Serialization.Deserializers
}
#endregion
#region IStreamDeserializer
/// <inheritdoc/>

View File

@@ -8,9 +8,37 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class Listrom :
IByteDeserializer<MetadataFile>,
IFileDeserializer<MetadataFile>,
IStreamDeserializer<MetadataFile>
{
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static MetadataFile? DeserializeBytes(byte[]? data, int offset)
{
var deserializer = new Listrom();
return deserializer.Deserialize(data, offset);
}
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -9,9 +9,37 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class RomCenter :
IByteDeserializer<MetadataFile>,
IFileDeserializer<MetadataFile>,
IStreamDeserializer<MetadataFile>
{
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static MetadataFile? DeserializeBytes(byte[]? data, int offset)
{
var deserializer = new RomCenter();
return deserializer.Deserialize(data, offset);
}
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>

View File

@@ -9,6 +9,7 @@ using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Deserializers
{
public class SeparatedValue :
IByteDeserializer<MetadataFile>,
IFileDeserializer<MetadataFile>,
IStreamDeserializer<MetadataFile>
{
@@ -20,6 +21,37 @@ namespace SabreTools.Serialization.Deserializers
#endregion
#region IByteDeserializer
/// <inheritdoc cref="IByteDeserializer.Deserialize(byte[]?, int)"/>
public static MetadataFile? DeserializeBytes(byte[]? data, int offset, char delim)
{
var deserializer = new SeparatedValue();
return deserializer.Deserialize(data, offset, delim);
}
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset)
=> Deserialize(data, offset, ',');
/// <inheritdoc/>
public MetadataFile? Deserialize(byte[]? data, int offset, char delim)
{
// If the data is invalid
if (data == null)
return null;
// If the offset is out of bounds
if (offset < 0 || offset >= data.Length)
return null;
// Create a memory stream and parse that
var dataStream = new MemoryStream(data, offset, data.Length - offset);
return DeserializeStream(dataStream, delim);
}
#endregion
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>