diff --git a/storage.go b/storage.go index aaac7d0..c37a1fc 100644 --- a/storage.go +++ b/storage.go @@ -1,6 +1,13 @@ package main -import "context" +import ( + "context" + "errors" +) + +var ( + ErrNotFound = errors.New("not found") +) type Storage struct { driver Driver @@ -14,8 +21,17 @@ func NewStorage(driver Driver) Storage { return Storage{driver: driver} } -func (s Storage) Enqueue(ctx context.Context, m Message) error { +func (s Storage) Upsert(ctx context.Context, m Message) error { + return s.driver.Set(ctx, "storage", m.ID, m.Serialize()) } -func (s Storage) Dequeue(ctx context.Context, m Message) error { +func (s Storage) Get(ctx context.Context, id string) (Message, error) { + b, err := s.driver.Get(ctx, "storage", id) + if err != nil { + return Message{}, err + } + if b == nil { + return Message{}, ErrNotFound + } + return MustDeserialize(b), nil }