📄
RedditSearchProvider.cs
using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Json; using System.Runtime.CompilerServices; using System.Threading; using MSearch.Domain; namespace MSearch.SearchProviders.Reddit; internal sealed class RedditSearchProvider(HttpClient httpClient) : ISearchProvider { public async IAsyncEnumerable<SearchResult> Search( SearchQuery query, [EnumeratorCancellation] CancellationToken cancellationToken ) { var response = await httpClient.GetFromJsonAsync( $"https://www.reddit.com/search.json?q={Uri.EscapeDataString(query.Term)}", RedditJsonSerializerContext.Default.RedditSearchResponse, cancellationToken ); if (response is null) { yield break; } foreach (var item in response.Data.Children) { yield return Map(item.Data); } } private static SearchResult Map(RedditSearchResult result) => new(result.Title, result.SelfText, new("https://reddit.com" + result.Permalink)); }