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 retrieval.Success && !string.IsNullOrWhiteSpace(retrieval.Value) ? Result.Ok(retrieval.Value) : Result.Fail(NotFoundError.Create($"Could not find object by key {key}")); })); public async ValueTask> GetAsync(string key) where TValue : class => await Result.Try((Func>>)(async () => { var retrieval = await storage.GetAsync(key); return retrieval.Success && retrieval.Value is not null ? Result.Ok(retrieval.Value) : Result.Fail(NotFoundError.Create($"Could not find object by key {key}")); })); }