public static void ReadArgs <T1>(this IJSValueReader reader, out T1 arg1)
        {
            bool success = reader.ValueType == JSValueType.Array;

            arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T1>() : default(T1);
            _    = success && reader.SkipArrayToEnd();
        }
   public static void ReadValue <T1>(this IJSValueReader reader, out Tuple <T1> value)
   {
       value = (reader.ValueType == JSValueType.Array &&
                reader.TryReadArrayItem(out T1 t1) &&
                reader.SkipArrayToEnd())
 ? new Tuple <T1>(t1)
 : default;
        public static void ReadArgs <T1, T2, T3, T4>(this IJSValueReader reader,
                                                     out T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4)
        {
            bool success = reader.ValueType == JSValueType.Array;

            arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T1>() : default(T1);
            arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T2>() : default(T2);
            arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T3>() : default(T3);
            arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T4>() : default(T4);
            _    = success && reader.SkipArrayToEnd();
        }
        public static void ReadArgs <T1, T2, T3, T4, T5, T6, T7>(this IJSValueReader reader,
                                                                 out T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4, out T5 arg5, out T6 arg6, out T7 arg7)
        {
            bool success = reader.ValueType == JSValueType.Array;

            arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T1>() : default(T1);
            arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T2>() : default(T2);
            arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T3>() : default(T3);
            arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T4>() : default(T4);
            arg5 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T5>() : default(T5);
            arg6 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T6>() : default(T6);
            arg7 = reader.GetNextArrayItem(ref success) ? reader.ReadValue <T7>() : default(T7);
            _    = success && reader.SkipArrayToEnd();
        }
        public static void ReadArgs(this IJSValueReader reader)
        {
            bool success = reader.ValueType == JSValueType.Array;

            _ = success && reader.SkipArrayToEnd();
        }