using LiteCharms.Features.Abstractions; namespace LiteCharms.Features.Browser; public sealed class LocalStorageService(ProtectedLocalStorage storage) : IService { public async ValueTask DeleteAsync(string key) { try { await storage.DeleteAsync(key); return Result.Ok(); } catch (Exception ex) { return Result.Fail(new Error(ex.Message).CausedBy(ex)); } } public async ValueTask SaveAsync(string key, string value) { try { await storage.SetAsync(key, value); return Result.Ok(); } catch (Exception ex) { return Result.Fail(new Error(ex.Message).CausedBy(ex)); } } public async ValueTask SaveAsync(string key, TValue value) where TValue : class { try { await storage.SetAsync(key, value); return Result.Ok(); } catch (Exception ex) { return Result.Fail(new Error(ex.Message).CausedBy(ex)); } } public async ValueTask> GetAsync(string key) { try { var retrieval = await storage.GetAsync(key); return retrieval.Success && !string.IsNullOrWhiteSpace(retrieval.Value) ? Result.Ok(retrieval.Value) : Result.Fail($"Could not find object by key {key}"); } catch (Exception ex) { return Result.Fail(new Error(ex.Message).CausedBy(ex)); } } public async ValueTask> GetAsync(string key) where TValue : class { try { var retrieval = await storage.GetAsync(key); return retrieval.Success && retrieval.Value is not null ? Result.Ok(retrieval.Value) : Result.Fail($"Could not find object by key {key}"); } catch (Exception ex) { return Result.Fail(new Error(ex.Message).CausedBy(ex)); } } }