protocol Model: Unique {
associatedtype IDKey
var idKey: KeyPath<Model, IDKey> { get }
}
enum StorageValueEvent {
case new(value: Value)
case updated(value: Value)
case failed(value: Value, error: Error)
}
protocol Storage {
associdatetype: Value: Model
func observe(
_ observer: (Result<[StorageValueEvent]> -> Void)
)
func update(_ value: Value)
}