shock/shock.go
jolheiser de4e822f7d
Refactor to using Init funcs and add gob serializer
Signed-off-by: jolheiser <john.olheiser@gmail.com>
2020-08-03 16:11:20 -05:00

49 lines
950 B
Go

package shock
import (
"os"
"go.etcd.io/bbolt"
)
// DB is a Shock (BBolt) database
type DB struct {
Bolt *bbolt.DB
Serializer Serializer
}
// Open creates a connection to a database file
func Open(path string, mode os.FileMode, options *Options) (*DB, error) {
if options == nil {
options = DefaultOptions
}
db, err := bbolt.Open(path, mode, options.Bolt)
if err != nil {
return nil, err
}
return &DB{
Bolt: db,
Serializer: options.Serializer,
}, nil
}
// Bucket returns a shorthand wrapper for interacting with a specific bucket
func (d *DB) Bucket(name string) *Bucket {
return &Bucket{
Name: name,
DB: d,
}
}
// Init initializes buckets if they don't exist
func (d *DB) Init(buckets ...string) error {
return d.Bolt.Update(func(tx *bbolt.Tx) error {
for _, bucket := range buckets {
if _, err := tx.CreateBucketIfNotExists([]byte(bucket)); err != nil {
return err
}
}
return nil
})
}