public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Time result)
        {
            result = default;
            ReadResults readResults = reader.ReadFloat(out float time);

            if (!readResults.Successful)
            {
                return(readResults);
            }

            if (time < 0.0f)
            {
                return(ReadResults.Failure(CommandError.InvalidTickCount()));
            }

            if (!reader.AtEndOfArgument())
            {
                if (resources.TimeScalars.TryGetScalar(reader.Peek(), out int scalar))
                {
                    time *= scalar;
                    reader.Skip();
                }
                else
                {
                    return(ReadResults.Failure(CommandError.InvalidTimeUnit().WithContext(reader)));
                }
            }

            result = new Time((int)time);
            return(ReadResults.Success());
        }