2025-07-06 22:59:08 +03:00
|
|
|
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,
|
2025-07-21 17:16:10 +03:00
|
|
|
Description: "tiny storage bucket",
|
2025-07-06 22:59:08 +03:00
|
|
|
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
|
|
|
|
}
|