private static object Decode(Type type, string raw, GameStruct instance)
        {
            var parser      = new LLParser(instance.GetParserSense(), raw);
            var description = GeometryDashApi.GetStructMemberCache(type);

            Span <char> next     = null;
            var         position = -1;

            while ((next = parser.Next()) != null)
            {
                position++;
                var value = next.ToString();
                if (!description.Members.TryGetValue(position, out var member))
                {
                    throw new Exception($"Can't find member for position: {position}");
                }

                if (member.ArraySeparatorAttribute != null)
                {
                    member.SetValue(instance, ArrayParser.Decode(member.MemberType, member.ArraySeparatorAttribute.Separator, value));
                    continue;
                }

                member.SetValue(instance, GeometryDashApi.GetStringParser(member.MemberType)(value));
            }

            return(instance);
        }
        public static object Decode(Type type, string separator, string raw)
        {
            var instance = Activator.CreateInstance(type);
            var argument = type.GetGenericArguments()[0];
            var parser   = new LLParser(separator, raw);

            Span <char> next = null;
            var         add  = type.GetMethod("Add");

            while ((next = parser.Next()) != null)
            {
                add !.Invoke(instance, new object[] { GeometryDashApi.GetStringParser(argument)(next.ToString()) });
            }
            return(instance);
        }