/// <inheritdoc />
        public async Task HandleSearchRequests(Func <Request, ISearchResult> searchCoreFunc)
        {
            userInterface.ShowMessage($"{Environment.NewLine}Enter search expression:");
            var searchRequest = await userInterface.ConsumeInputAsync();

            var stopwatch = Stopwatch.StartNew();

            var resultText = searchCoreFunc(searchRequest) switch
            {
                ISearchResult.Success success => await StringRepresentation(success.Items, stopwatch.Elapsed),
                ISearchResult.Failure failure => failure.ErrorText,
                _ => throw new ArgumentOutOfRangeException(nameof(ISearchResult))
            };

            userInterface.ShowMessage(resultText);
            userInterface.ShowMessage($"{Environment.NewLine}exit? [yes/no]");
            var input = await userInterface.ConsumeInputAsync();

            if (!string.Equals(input, "yes", StringComparison.InvariantCultureIgnoreCase))
            {
                await HandleSearchRequests(searchCoreFunc);
            }
        }