2025-07-06 22:59:08 +03:00
|
|
|
package natsobj
|
|
|
|
|
|
|
|
import (
|
2025-07-27 19:02:05 +03:00
|
|
|
"errors"
|
|
|
|
|
|
|
|
"code.uint32.ru/tiny/storage/internal/errinternal"
|
2025-07-06 22:59:08 +03:00
|
|
|
"github.com/nats-io/nats.go"
|
|
|
|
)
|
|
|
|
|
2025-07-27 19:02:05 +03:00
|
|
|
var (
|
|
|
|
ErrNotFound = errinternal.ErrNotFound
|
|
|
|
)
|
|
|
|
|
2025-07-06 22:59:08 +03:00
|
|
|
type Storage struct {
|
|
|
|
store nats.ObjectStore
|
|
|
|
}
|
|
|
|
|
2025-07-27 19:02:05 +03:00
|
|
|
func New(store nats.ObjectStore) *Storage {
|
|
|
|
return &Storage{store: store}
|
2025-07-06 22:59:08 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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)
|
2025-07-27 19:02:05 +03:00
|
|
|
if err != nil && errors.Is(err, nats.ErrObjectNotFound) {
|
|
|
|
return nil, errors.Join(ErrNotFound, err)
|
|
|
|
} else if err != nil {
|
2025-07-06 22:59:08 +03:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return b, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *Storage) Delete(key string) error {
|
2025-07-27 19:02:05 +03:00
|
|
|
err := n.store.Delete(key)
|
|
|
|
if err != nil && errors.Is(err, nats.ErrObjectNotFound) {
|
|
|
|
return nil
|
|
|
|
} else if err != nil {
|
2025-07-06 22:59:08 +03:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|