using System.Globalization; using System.Reflection; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; using Newtonsoft.Json; namespace MareSynchronos.Utils; public static class VariousExtensions { public static DateTime GetLinkerTime(Assembly assembly) { const string BuildVersionMetadataPrefix = "+build"; var attribute = assembly.GetCustomAttribute(); if (attribute?.InformationalVersion != null) { var value = attribute.InformationalVersion; var index = value.IndexOf(BuildVersionMetadataPrefix, StringComparison.Ordinal); if (index > 0) { value = value[(index + BuildVersionMetadataPrefix.Length)..]; return DateTime.ParseExact(value, "yyyy-MM-ddTHH:mm:ss:fffZ", CultureInfo.InvariantCulture); } } return default; } public static T DeepClone(this T obj) { return JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj))!; } }