from dataclasses import dataclass
from typing import Any, Iterable
from .base import ValueMixin, CallMixin, StorageBackend, DestructuringMixin
from ..digest import Digest
from copy import deepcopy
@dataclass(frozen=True)
[docs]
class MemoryBackend(StorageBackend):
"""
A concrete implementation of Storage that stores values in an in-memory dictionary.
"""
[docs]
storage: dict[Digest, Any]
[docs]
def list(self) -> Iterable[Digest]:
return tuple(self.storage.keys())
[docs]
def put(self, value: Any, key: Digest) -> Digest:
self.storage[key] = deepcopy(value)
return key
[docs]
def get(self, key: Digest) -> Any:
return deepcopy(self.storage[key])
[docs]
def _contains(self, key: Digest) -> bool:
return key in self.storage
[docs]
def _evict(self, key: Digest) -> None:
self.storage.pop(key, None)
[docs]
class ValueMemory(ValueMixin, DestructuringMixin, MemoryBackend): ...
[docs]
class CallMemory(CallMixin, MemoryBackend): ...