public BaseRequestProcessor SetRequestProcessor <TBaseRequest, TBaseResponse, TResponse>(
     ICustomRequestProcessor <TBaseRequest, TBaseResponse, TResponse> processor)
     where TBaseRequest : BaseBotRequest <JToken>
     where TBaseResponse : BaseBotResponse <TResponse>
 {
     if (processor == null)
     {
         return(this);
     }
     _requestProcessors.AddOrUpdate(processor.RequestType, str => ProcessFunc(str, processor), (type, func) => (str => ProcessFunc(str, processor)));
     return(this);
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="authService">Provide events requests auth</param>
 /// <param name="validationRequestProcessor">For events validation request (events, commands, actions)</param>
 /// <param name="localizationService">Service for setting locale app</param>
 protected BaseRequestProcessor(IBotAuthService authService, ICustomRequestProcessor <BaseUrlValidationBotRequest <JToken>,
                                                                                      BaseUrlValidationBotResponse <UrlValidationBotResponse>, UrlValidationBotResponse> validationRequestProcessor,
                                ILocalizationService localizationService)
 {
     _authService         = authService;
     _localizationService = localizationService;
     _requestProcessors   = new ConcurrentDictionary <BotRequestType, Func <string, Task <object> > >(
         new List <KeyValuePair <BotRequestType, Func <string, Task <object> > > >
     {
         new KeyValuePair <BotRequestType, Func <string, Task <object> > >(validationRequestProcessor.RequestType,
                                                                           str => ProcessFunc(str, validationRequestProcessor))
     });
 }
 public TestRequestProcessor(IBotAuthService authService, ICustomRequestProcessor <BaseUrlValidationBotRequest <JToken>,
                                                                                   BaseUrlValidationBotResponse <UrlValidationBotResponse>, UrlValidationBotResponse> validationRequestProcessor,
                             ILocalizationService localizationService)
     : base(authService, validationRequestProcessor, localizationService)
 {
 }
 private static async Task <object> ProcessFunc <TBaseRequest, TBaseResponse, TResponse>(string str,
                                                                                         ICustomRequestProcessor <TBaseRequest, TBaseResponse, TResponse> processor)
     where TBaseRequest : BaseBotRequest <JToken>
     where TBaseResponse : BaseBotResponse <TResponse>
 {
     return(await processor.ProcessAsync(JsonConvert.DeserializeObject <TBaseRequest>(str)).ConfigureAwait(false));
 }