Adding, Tweaking, Etc.

This commit is contained in:
2025-02-06 08:18:30 -06:00
parent 2c2d8424b3
commit 1899168f8a
2 changed files with 60 additions and 18 deletions
+54 -3
View File
@@ -143,11 +143,12 @@ func GetBool(bkt *bolt.Bucket, key string) (bool, error) {
if err != nil {
return false, err
}
if r == "true" || r == "1" {
switch r {
case "true", "1":
return true, nil
} else if r == "false" || r == "0" {
case "false", "0":
return false, nil
} else {
default:
return false, fmt.Errorf("cannot parse as a boolean")
}
}
@@ -384,3 +385,53 @@ func SetKeyValueStringMap(bkt *bolt.Bucket, kvMap map[string]string) error {
}
return SetKeyValueMap(bkt, chain)
}
func GetStruct[T any](bkt *bolt.Bucket, fn func(*bolt.Bucket) (T, error)) (T, error) {
return fn(bkt)
}
func SetStruct[T any](bkt *bolt.Bucket, value T, fn func(*bolt.Bucket, T) error) error {
return fn(bkt, value)
}
func GetStructList[T any](bkt *bolt.Bucket, fn func(*bolt.Bucket) (T, error)) ([]T, error) {
var ret []T
if bkt == nil {
return nil, fmt.Errorf("bucket must not be nil")
}
keyList, err := GetBucketList(bkt)
if err != nil {
return nil, err
}
for _, k := range keyList {
sBkt, err := GetBucket(bkt, k)
if err != nil {
return nil, err
}
v, err := fn(sBkt)
if err != nil {
return nil, err
}
ret = append(ret, v)
}
return ret, nil
}
func SetStructList[T any](bkt *bolt.Bucket, values []T, fn func(*bolt.Bucket, T) error) error {
bkt.SetSequence(0)
for _, v := range values {
id, _ := bkt.NextSequence()
bId := make([]byte, 8)
binary.BigEndian.PutUint64(bId, id)
// Delete the bucket if it already exists
bkt.DeleteBucket(bId)
structBkt, err := bkt.CreateBucketIfNotExists(bId)
if err != nil {
return err
}
if err = fn(structBkt, v); err != nil {
return err
}
}
return nil
}