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 }