/// <summary>
        ///     Fetch a subset of scores. The scores are passed to <paramref name="onSuccess"/>.
        /// </summary>
        /// <returns>Returns true if we have started the query</returns>
        public bool FetchScores(RequestType RequestType, int start, int end, FetchScoresCallback onSuccess, FailureCallback onFailure = null)
        {
            if (IsError)
            {
                return(false);
            }
            if (!IsValid)
            {
                return(DeferOnCreated(() => FetchScores(RequestType, start, end, onSuccess, onFailure), onFailure));
            }

            client.native.userstats.DownloadLeaderboardEntries(BoardId, (LeaderboardDataRequest)RequestType, start, end, (result, error) =>
            {
                if (error)
                {
                    onFailure?.Invoke(Callbacks.Result.IOFailure);
                }
                else
                {
                    if (_sEntryBuffer == null)
                    {
                        _sEntryBuffer = new List <Entry>();
                    }
                    else
                    {
                        _sEntryBuffer.Clear();
                    }

                    ReadScores(result, _sEntryBuffer);
                    onSuccess(_sEntryBuffer.ToArray());
                }
            });

            return(true);
        }
        public unsafe bool FetchUsersScores(RequestType RequestType, UInt64[] steamIds, FetchScoresCallback onSuccess, FailureCallback onFailure = null)
        {
            if (IsError)
            {
                return(false);
            }
            if (!IsValid)
            {
                return(DeferOnCreated(() => FetchUsersScores(RequestType, steamIds, onSuccess, onFailure), onFailure));

                fixed(ulong *pointer = steamIds)
                {
                    client.native.userstats.DownloadLeaderboardEntriesForUsers(BoardId, (IntPtr)pointer, steamIds.Length, (result, error) =>
                {
                    if (error)
                    {
                        onFailure?.Invoke(Callbacks.Result.IOFailure);
                    }
                    else
                    {
                        if (_sEntryBuffer == null)
                        {
                            _sEntryBuffer = new List <Entry>();
                        }
                        else
                        {
                            _sEntryBuffer.Clear();
                        }

                        ReadScores(result, _sEntryBuffer);
                        onSuccess(_sEntryBuffer.ToArray());
                    }
                });
                }

                return(true);
        }