using System; namespace Unity.VisualScripting { public class Clipboard { public SerializationData data { get; private set; } public Type dataType { get; private set; } public bool containsData => dataType != null; public void Clear() { data = default(SerializationData); dataType = null; } public void Copy(object value) { Ensure.That(nameof(value)).IsNotNull(value); data = value.Serialize(); dataType = value.GetType(); } public bool CanPaste(Type type) { return containsData && dataType.IsConvertibleTo(type, true); } public bool CanPaste() { return CanPaste(typeof(T)); } public T Paste() { return (T)Paste(typeof(T)); } public object Paste() { if (!containsData) { throw new InvalidOperationException($"Graph clipboard does not contain data."); } return data.Deserialize(); } public object Paste(Type type) { if (!CanPaste(type)) { throw new InvalidOperationException($"Graph clipboard does not contain '{type.CSharpName(false)}'."); } return ConversionUtility.Convert(Paste(), type); } } }