internal void FetchGradient()
 {
     if (!m_HasGradient.HasValue)
     {
         m_HasGradient   = ClipboardParser.ParseCustom <GradientWrapper>(m_RawContents, out var wrapper);
         m_ValueGradient = wrapper.gradient;
     }
 }
 internal void FetchAnimationCurve()
 {
     if (!m_HasAnimationCurve.HasValue)
     {
         m_HasAnimationCurve   = ClipboardParser.ParseCustom <AnimationCurveWrapper>(m_RawContents, out var wrapper);
         m_ValueAnimationCurve = wrapper.curve;
     }
 }
 internal void FetchObject()
 {
     if (!m_HasObject.HasValue)
     {
         m_HasObject   = ClipboardParser.ParseCustom <ObjectWrapper>(m_RawContents, out var wrapper);
         m_ValueObject = wrapper.ToObject();
     }
 }
        internal bool FetchCustom <T>(out T res) where T : new()
        {
            var key = typeof(T);

            if (m_ValuesCustom.TryGetValue(key, out var cached))
            {
                if (cached != null)
                {
                    res = (T)cached;
                    return(true);
                }
                res = default;
                return(false);
            }
            var ok = ClipboardParser.ParseCustom(m_RawContents, out res);

            m_ValuesCustom.Add(key, ok ? res : default);
            return(ok);
        }