Aetheria/Aetheria.State/AetheriaVerseHostSettingsNormalizer.cs
2026-06-17 08:07:42 +01:00

44 lines
2.5 KiB
C#

using Aetheria.State.Documents;
namespace Aetheria.State;
public static class AetheriaVerseHostSettingsNormalizer
{
public static AetheriaVerseHostSettings Normalize(AetheriaVerseHostSettings? settings)
{
return new AetheriaVerseHostSettings
{
Schema = NormalizeOrDefault(settings?.Schema, "aetheria.verse_host_settings.v1"),
ServiceId = NormalizeOrDefault(settings?.ServiceId, "aetheria.runtime"),
VerseId = NormalizeOrDefault(settings?.VerseId, "aetheria.local"),
RootVerse = NormalizeOrDefault(settings?.RootVerse, "asgard"),
CanonicalService = NormalizeOrDefault(settings?.CanonicalService, "asgard.aetheria"),
LocatedService = NormalizeOrDefault(settings?.LocatedService, "asgard.local.aetheria"),
CultMeshAddress = NormalizeOrDefault(settings?.CultMeshAddress, "asgard.local.aetheria/eve"),
Title = NormalizeOrDefault(settings?.Title, "Aetheria"),
Visibility = NormalizeOrDefault(settings?.Visibility, "private"),
LastUpdatedAtUtc = settings?.LastUpdatedAtUtc?.Trim() ?? ""
};
}
public static bool Equivalent(AetheriaVerseHostSettings? left, AetheriaVerseHostSettings? right)
{
var normalizedLeft = Normalize(left);
var normalizedRight = Normalize(right);
return string.Equals(normalizedLeft.Schema, normalizedRight.Schema, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.ServiceId, normalizedRight.ServiceId, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.VerseId, normalizedRight.VerseId, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.RootVerse, normalizedRight.RootVerse, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.CanonicalService, normalizedRight.CanonicalService, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.LocatedService, normalizedRight.LocatedService, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.CultMeshAddress, normalizedRight.CultMeshAddress, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.Title, normalizedRight.Title, StringComparison.Ordinal) &&
string.Equals(normalizedLeft.Visibility, normalizedRight.Visibility, StringComparison.Ordinal);
}
private static string NormalizeOrDefault(string? value, string fallback)
{
var trimmed = value?.Trim();
return string.IsNullOrWhiteSpace(trimmed) ? fallback : trimmed;
}
}