private Optional <UciScore> NextScore(Queue <string> parts)
        {
            UciScoreBoundType boundType = UciScoreBoundType.Exact;
            UciScoreType      type      = UciScoreType.Cp;
            string            typestr   = parts.Dequeue();

            if (typestr == "mate")
            {
                type = UciScoreType.Mate;
            }

            string valuestr = "0";

            if (parts.Count != 0)
            {
                valuestr = parts.Dequeue();

                if (parts.Count != 0)
                {
                    string boundstr = parts.Peek();
                    if (boundstr == "lowerbound")
                    {
                        boundType = UciScoreBoundType.LowerBound;
                        parts.Dequeue();
                    }
                    else if (boundstr == "upperbound")
                    {
                        boundType = UciScoreBoundType.UpperBound;
                        parts.Dequeue();
                    }
                }
            }

            return(Optional <UciScore> .Create(new UciScore(
                                                   int.Parse(valuestr),
                                                   type,
                                                   boundType
                                                   )));
        }
#pragma warning restore IDE0052 // Remove unread private members

        public UciScore(int value, UciScoreType type, UciScoreBoundType boundType)
        {
            Value     = value;
            Type      = type;
            BoundType = boundType;
        }