package store

import (
	"github.com/mjl-/bstore"
)

// todo: get rid of this. it's a bad idea to indiscriminately turn all panics into an error.
func extransact(db *bstore.DB, write bool, fn func(tx *bstore.Tx) error) (rerr error) {
	defer func() {
		x := recover()
		if x == nil {
			return
		}
		if err, ok := x.(error); ok {
			rerr = err
		} else {
			panic(x)
		}
	}()
	if write {
		return db.Write(fn)
	}
	return db.Read(fn)
}