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)
This commit is contained in:
@@ -1,41 +1,22 @@
|
||||
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
|
||||
conn *nats.Conn
|
||||
}
|
||||
|
||||
func Open(bucket, url string) (*Storage, error) {
|
||||
nc, err := nats.Connect(url)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
js, err := nc.JetStream()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cfg := &nats.ObjectStoreConfig{
|
||||
Bucket: bucket,
|
||||
Description: "tiny storage bucket",
|
||||
MaxBytes: -1,
|
||||
Storage: nats.FileStorage,
|
||||
Compression: true,
|
||||
}
|
||||
|
||||
store, err := js.CreateObjectStore(cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
st := &Storage{store: store, conn: nc}
|
||||
|
||||
return st, nil
|
||||
func New(store nats.ObjectStore) *Storage {
|
||||
return &Storage{store: store}
|
||||
}
|
||||
|
||||
func (n *Storage) Save(key string, data []byte) error {
|
||||
@@ -47,7 +28,9 @@ func (n *Storage) Save(key string, data []byte) error {
|
||||
|
||||
func (n *Storage) Load(key string) ([]byte, error) {
|
||||
b, err := n.store.GetBytes(key)
|
||||
if err != nil {
|
||||
if err != nil && errors.Is(err, nats.ErrObjectNotFound) {
|
||||
return nil, errors.Join(ErrNotFound, err)
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -55,15 +38,12 @@ func (n *Storage) Load(key string) ([]byte, error) {
|
||||
}
|
||||
|
||||
func (n *Storage) Delete(key string) error {
|
||||
if err := n.store.Delete(key); err != nil {
|
||||
err := n.store.Delete(key)
|
||||
if err != nil && errors.Is(err, nats.ErrObjectNotFound) {
|
||||
return nil
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (n *Storage) Close() error {
|
||||
n.conn.Close()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user