Files

54 lines
1.7 KiB
C#
Raw Permalink Normal View History

2026-01-27 12:03:01 -05:00
#pragma warning disable IDE0017 // Simplify object initialization
2025-09-26 14:57:20 -04:00
namespace SabreTools.Serialization.Readers
2023-09-13 15:30:32 -04:00
{
public partial class XMID : IStringReader<Data.Models.Xbox.XMID>
2023-09-13 15:30:32 -04:00
{
/// <inheritdoc/>
public bool Debug { get; set; } = false;
/// <inheritdoc cref="IStringReader.Deserialize(string?)"/>
2025-09-26 13:06:18 -04:00
public static Data.Models.Xbox.XMID? DeserializeString(string? str)
{
var deserializer = new XMID();
return deserializer.Deserialize(str);
}
2023-09-13 15:30:32 -04:00
/// <inheritdoc/>
2025-09-26 13:06:18 -04:00
public Data.Models.Xbox.XMID? Deserialize(string? str)
2023-09-13 15:30:32 -04:00
{
2023-11-21 20:59:20 -05:00
if (string.IsNullOrEmpty(str))
2023-09-13 15:30:32 -04:00
return null;
2023-11-07 23:30:26 -05:00
string xmid = str!.TrimEnd('\0');
2023-11-21 20:59:20 -05:00
if (string.IsNullOrEmpty(xmid))
2023-09-13 15:30:32 -04:00
return null;
return ParseXMID(xmid);
}
/// <summary>
/// Parse an XGD2/3 XMID string
/// </summary>
/// <param name="xmidString">XMID string to attempt to parse</param>
/// <returns>Filled XMID on success, null on error</returns>
2025-09-26 13:06:18 -04:00
private static Data.Models.Xbox.XMID? ParseXMID(string? xmidString)
2023-09-13 15:30:32 -04:00
{
2026-01-25 14:30:18 -05:00
if (xmidString is null || xmidString.Length != 8)
2023-09-13 15:30:32 -04:00
return null;
2025-09-26 13:06:18 -04:00
var xmid = new Data.Models.Xbox.XMID();
2023-09-13 15:30:32 -04:00
2025-11-14 09:06:59 -05:00
#if NETCOREAPP || NETSTANDARD2_1_OR_GREATER
xmid.PublisherIdentifier = xmidString[..2];
#else
2023-09-13 15:30:32 -04:00
xmid.PublisherIdentifier = xmidString.Substring(0, 2);
2025-11-14 09:06:59 -05:00
#endif
2023-09-13 15:30:32 -04:00
xmid.GameID = xmidString.Substring(2, 3);
xmid.VersionNumber = xmidString.Substring(5, 2);
xmid.RegionIdentifier = xmidString[7];
return xmid;
}
}
}