using Dalamud.Game.ClientState.Objects.Types; using System.Text.Json; namespace MareSynchronos.Utils; public static class VariousExtensions { public static T DeepClone(this T obj) { return JsonSerializer.Deserialize(JsonSerializer.Serialize(obj))!; } public static unsafe int? ObjectTableIndex(this GameObject? gameObject) { if (gameObject == null || gameObject.Address == IntPtr.Zero) { return null; } return ((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)gameObject.Address)->ObjectIndex; } public static void CancelDispose(this CancellationTokenSource? cts) { try { cts?.Cancel(); cts?.Dispose(); } catch(ObjectDisposedException) { // swallow it } } public static CancellationTokenSource CancelRecreate(this CancellationTokenSource? cts) { cts.CancelDispose(); return new CancellationTokenSource(); } }