protected override async Task QueryAsync(IQuery query, CancellationToken ct) { var searchQuery = _queryParser.Bind(query.Argument, out var freeText); searchQuery.Site = Site; if (string.IsNullOrEmpty(searchQuery.InTitle)) { searchQuery.InTitle = freeText; } var questions = await _stackExchangeClient.SearchAsync(searchQuery, ct); if (!questions.Any()) { foreach (var queryResult in CreateFallbackResult(searchQuery)) { Available(queryResult); } return; } if (query is DefaultQuery) { questions = questions.Take(3).ToList(); } foreach (var queryResult in questions.Select(q => ConvertQuestion(q, query))) { Available(queryResult); } }
public async Task <IEnumerable <QueryResult> > QueryAsync(Query query, CancellationToken ct) { var searchQuery = _queryParser.Bind(query.Argument, out var freeText); searchQuery.Site = Site; if (string.IsNullOrEmpty(searchQuery.InTitle)) { searchQuery.InTitle = freeText; } var questions = await _stackExchangeClient.SearchAsync(searchQuery, ct); if (!questions.Any()) { return(CreateFallbackResult(searchQuery)); } return(questions.Select(question => ConvertQuestion(question, query))); }
public static TOption Bind <TOption>(this IQueryParser <TOption> parser, string query, out string unmatched) where TOption : new() { return(parser.Bind(query, out _, out unmatched)); }