/// <summary> /// Выполняет действие над моделью команды, если её удалось распарсить. /// </summary> /// <param name="commandParseResult">Экземпляр команды.</param> /// <param name="callback">Действие над результатом.</param> /// <param name="finalConsumer">Признак того, что данный обработчик является завершающим.</param> /// <typeparam name="TResult">Тип результата.</typeparam> /// <returns>Модель команды.</returns> public static ICommandParseResult <object> WhenParsed <TResult>(this ICommandParseResult <object> commandParseResult, Action <TResult> callback, bool finalConsumer = true) { if (commandParseResult is ParsedCommand <object> pc && pc.Value is TResult result) { callback(result); return(finalConsumer ? new ConsumedCommand <object>(commandParseResult) : commandParseResult); } return(commandParseResult); }
/// <summary> /// Выполняет действие над моделью команды, если её не удалось распарсить. /// </summary> /// <param name="commandParseResult">Экземпляр команды.</param> /// <param name="callback">Действие над результатом.</param> /// <param name="finalConsumer">Признак того, что данный обработчик является завершающим.</param> /// <typeparam name="TResult">Тип результата.</typeparam> /// <returns>Модель команды.</returns> public static ICommandParseResult <TResult> WhenNotParsed <TResult>(this ICommandParseResult <TResult> commandParseResult, Action <IReadOnlyCollection <CommandParseError> > callback, bool finalConsumer = true) where TResult : class, new() { if (commandParseResult is UnparsedCommand <TResult> uc) { callback(uc.Errors); return(finalConsumer ? new ConsumedCommand <TResult>(commandParseResult) : commandParseResult); } return(commandParseResult); }
/// <summary> /// Выполняет действие над моделью команды, если её удалось распарсить. /// </summary> /// <param name="commandParseResult">Экземпляр команды.</param> /// <param name="callback">Действие над результатом.</param> /// <param name="finalConsumer">Признак того, что данный обработчик является завершающим.</param> /// <typeparam name="TResult">Тип результата.</typeparam> /// <returns>Модель команды.</returns> public static ICommandParseResult <TResult> WhenParsed <TResult>(this ICommandParseResult <TResult> commandParseResult, Action <TResult> callback, bool finalConsumer = true) where TResult : class, new() { if (commandParseResult is ParsedCommand <TResult> pc) { callback(pc.Value); return(finalConsumer ? new ConsumedCommand <TResult>(commandParseResult) : commandParseResult); } return(commandParseResult); }
/// <summary> /// Инициализиуер экземпляр <see cref="ConsumedCommand{TModel}"/>. /// </summary> /// <param name="original">Оригинальная команда.</param> internal ConsumedCommand(ICommandParseResult <TModel> original) : base(CommandParseState.Consumed) { Original = original; }