using PostFundManagement.Domain.Errors; namespace PostFundManagement.Application.Services.Shared; public sealed class BrowserLocalStorageService(ProtectedLocalStorage storage) { public async ValueTask DeleteAsync(string key) => await Result.Try((Func>)(async () => { await storage.DeleteAsync(key); return Result.Ok(); })); public async ValueTask SaveAsync(string key, string value) => await Result.Try((Func>)(async () => { await storage.SetAsync(key, value); return Result.Ok(); })); public async ValueTask SaveAsync(string key, TValue value) where TValue : class => await Result.Try((Func>)(async () => { await storage.SetAsync(key, value); return Result.Ok(); })); public async ValueTask> GetAsync(string key) => await Result.Try((Func>>)(async () => { var retrieval = await storage.GetAsync(key); return Result.FailIf(!retrieval.Success && string.IsNullOrWhiteSpace(retrieval.Value), NotFoundError.Create($"Could not find object by key {key}")) .ToResult(retrieval.Value!); })); public async ValueTask> GetAsync(string key) where TValue : class => await Result.Try((Func>>)(async () => { var retrieval = await storage.GetAsync(key); return Result.FailIf(!retrieval.Success && retrieval.Value is null, NotFoundError.Create($"Could not find object by key {key}")) .ToResult(retrieval.Value!); })); }