コード例 #1
0
 public CommandInitializationRequest(
     Type commandType, object commandInstance, TokenizedCommand tokenizedCommand, ICommandParseRequest parseRequest)
 {
     CommandType      = commandType;
     CommandInstance  = commandInstance;
     TokenizedCommand = tokenizedCommand;
     ParseRequest     = parseRequest;
 }
コード例 #2
0
        /// <inheritdoc />
        public CommandTokenizeStageResult Tokenize(ICommandParseRequest request)
        {
            EnsureSettingsValid(Settings);

            if (string.IsNullOrWhiteSpace(request.Input))
            {
                return(CommandTokenizeStageResult.Failed("Команда не задана"));
            }

            var normalizedInput = StringNormalizationRegex
                                  .Replace(request.Input, " ")
                                  .Trim();

            if (!TryExtractCommandVerb(normalizedInput, out var verb))
            {
                return(CommandTokenizeStageResult.Failed("Команда имеет некорректный формат"));
            }

            if (!TryExtractCommandQuery(normalizedInput, verb, out var commandQuery))
            {
                return(CommandTokenizeStageResult.Failed("Команда имеет некорректный формат"));
            }

            var errors         = new List <string>();
            var argumentTokens = new List <TokenizedCommand.ArgumentToken>();

            foreach (var queryArgument in ExtractQueryArguments(commandQuery))
            {
                if (!TrySeparateArgumentKeyValue(queryArgument, out var key, out var value))
                {
                    errors.Add($"Параметр '{queryArgument}' имеет некорректный формат. " +
                               "Ожидаемый формат параметра команды " +
                               $"'{Settings.ArgumentKeyPrefix}ключ значение'");

                    continue;
                }

                argumentTokens.Add(new TokenizedCommand.ArgumentToken(key, value));
            }

            if (errors.Count > 0)
            {
                return(CommandTokenizeStageResult.Failed(errors.ToArray()));
            }

            return(CommandTokenizeStageResult.Tokenized(new TokenizedCommand(verb, argumentTokens)));
        }
コード例 #3
0
 public CommandTokenizeStageResult Tokenize(ICommandParseRequest request)
 {
     return(_sourceTokenizer.Tokenize(request));
 }