Files
storage/internal/natsobj/nats_store.go
Dmitry Fedotov 854de3865b feat: add Vault
Co-authored-by: Dmitry Fedotov <dmitry@uint32.ru>
Co-committed-by: Dmitry Fedotov <dmitry@uint32.ru>
2025-07-21 17:16:10 +03:00

70 lines
1.1 KiB
Go

package natsobj
import (
"github.com/nats-io/nats.go"
)
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 (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 {
return nil, err
}
return b, nil
}
func (n *Storage) Delete(key string) error {
if err := n.store.Delete(key); err != nil {
return err
}
return nil
}
func (n *Storage) Close() error {
n.conn.Close()
return nil
}