using System.Diagnostics.CodeAnalysis; namespace StabilityMatrix.Core.Helper; [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] public static class Size { public const ulong KiB = 1024; public const ulong MiB = KiB * 1024; public const ulong GiB = MiB * 1024; private static string TrimZero(string value) { return value.TrimEnd('0').TrimEnd('.'); } public static string FormatBytes(ulong bytes, bool trimZero = false) { return bytes switch { < KiB => $"{bytes:0} Bytes", < MiB => (trimZero ? $"{bytes / (double)KiB:0.0}".TrimEnd('0').TrimEnd('.') : $"{bytes / (double)KiB:0.0}") + " KiB", < GiB => (trimZero ? $"{bytes / (double)MiB:0.0}".TrimEnd('0').TrimEnd('.') : $"{bytes / (double)MiB:0.0}") + " MiB", _ => (trimZero ? $"{bytes / (double)GiB:0.0}".TrimEnd('0').TrimEnd('.') : $"{bytes / (double)GiB:0.0}") + " GiB" }; } public static string FormatBase10Bytes(ulong bytes, bool trimZero = false) { return bytes switch { < KiB => $"{bytes:0} Bytes", < MiB => (trimZero ? $"{bytes / (double)KiB:0.0}".TrimEnd('0').TrimEnd('.') : $"{bytes / (double)KiB:0.0}") + " KB", < GiB => (trimZero ? $"{bytes / (double)MiB:0.0}".TrimEnd('0').TrimEnd('.') : $"{bytes / (double)MiB:0.0}") + " MB", _ => (trimZero ? $"{bytes / (double)GiB:0.00}".TrimEnd('0').TrimEnd('.') : $"{bytes / (double)GiB:0.00}") + " GB" }; } public static string FormatBase10Bytes(long bytes) { return FormatBase10Bytes(Convert.ToUInt64(bytes)); } }