Files
storage/internal/natsobj/nats_store.go
Dmitry Fedotov 48878e8433 feat: working version
1. implemented filesystem storage, NATS object storage
and saving to Vault.
2. Test coverage is fine for filesystem and Vault
(and NATS object does not really require extensive tests)
2025-07-27 19:02:05 +03:00

50 lines
893 B
Go

package natsobj
import (
"errors"
"code.uint32.ru/tiny/storage/internal/errinternal"
"github.com/nats-io/nats.go"
)
var (
ErrNotFound = errinternal.ErrNotFound
)
type Storage struct {
store nats.ObjectStore
}
func New(store nats.ObjectStore) *Storage {
return &Storage{store: store}
}
func (n *Storage) Save(key string, data []byte) error {
if _, err := n.store.PutBytes(key, data); err != nil {
return err
}
return nil
}
func (n *Storage) Load(key string) ([]byte, error) {
b, err := n.store.GetBytes(key)
if err != nil && errors.Is(err, nats.ErrObjectNotFound) {
return nil, errors.Join(ErrNotFound, err)
} else if err != nil {
return nil, err
}
return b, nil
}
func (n *Storage) Delete(key string) error {
err := n.store.Delete(key)
if err != nil && errors.Is(err, nats.ErrObjectNotFound) {
return nil
} else if err != nil {
return err
}
return nil
}