using DnsmasqWebUI.Client.Http.Abstractions; using DnsmasqWebUI.Models.Hosts; using DnsmasqWebUI.Models.Status; using System.Net.Http.Json; namespace DnsmasqWebUI.Client.Http; public sealed class HostsClient : IHostsClient { private readonly HttpClient _http; public HostsClient(HttpClient http) => _http = http; public async Task> GetHostsAsync(CancellationToken ct = default) { var list = await _http.GetFromJsonAsync>("api/hosts", ct); return list ?? new List(); } public async Task> GetReadOnlyHostsAsync(CancellationToken ct = default) { var list = await _http.GetFromJsonAsync>("api/hosts/readonly", ct); return list ?? new List(); } public async Task SaveHostsAsync(IReadOnlyList entries, CancellationToken ct = default) { var response = await _http.PutAsJsonAsync("api/hosts", entries, ct); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync(ct) ?? throw new InvalidOperationException("Unexpected null from api/hosts."); } }