Files
AlayaCore/AlayaCore/Models/Manifests/ManifestModel.cs

64 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace AlayaCore.Models.Manifests
{
[Serializable]
public sealed class ManifestModel
{
public Version AlayaVersion { get; }
public string RequiredJavaVersion { get; }
public Uri RequiredJavaBaseUrl { get; }
public string MinecraftVersion { get; }
public string NeoforgedVersion { get; }
public Uri ServerUrl { get; }
public int ServerPort { get; }
public IReadOnlyList<ModFileEntry> Files { get; }
public ManifestModel(
Version alayaVersion,
string requiredJavaVersion,
Uri requiredJavaUrl,
string minecraftVersion,
string neoforgedVersion,
Uri serverUrl,
int serverPort,
IEnumerable<ModFileEntry> files)
{
AlayaVersion = alayaVersion ?? throw new ArgumentNullException(nameof(alayaVersion));
RequiredJavaVersion = RequireNonEmpty(requiredJavaVersion, nameof(requiredJavaVersion));
RequiredJavaBaseUrl = requiredJavaUrl ?? throw new ArgumentNullException(nameof(requiredJavaUrl));
MinecraftVersion = RequireNonEmpty(minecraftVersion, nameof(minecraftVersion));
NeoforgedVersion = RequireNonEmpty(neoforgedVersion, nameof(neoforgedVersion));
if (files == null)
{
throw new ArgumentNullException(nameof(files));
}
ModFileEntry[] materializedFiles = files.ToArray();
if (materializedFiles.Any(file => file == null))
{
throw new ArgumentException("Files cannot contain null entries.", nameof(files));
}
Files = new ReadOnlyCollection<ModFileEntry>(materializedFiles);
}
private static string RequireNonEmpty(string value, string paramName)
{
if (string.IsNullOrWhiteSpace(value))
{
throw new ArgumentException("Value cannot be null, empty, or whitespace.", paramName);
}
return value;
}
}
}