github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/store/shared_var.go (about)

     1  package store
     2  
     3  import (
     4  	"errors"
     5  
     6  	bolt "go.etcd.io/bbolt"
     7  )
     8  
     9  // ErrNoSharedVar is returned by Store.SharedVar when there is no such variable.
    10  var ErrNoSharedVar = errors.New("no such shared variable")
    11  
    12  func init() {
    13  	initDB["initialize shared variable table"] = func(tx *bolt.Tx) error {
    14  		_, err := tx.CreateBucketIfNotExists([]byte(bucketSharedVar))
    15  		return err
    16  	}
    17  }
    18  
    19  // SharedVar gets the value of a shared variable.
    20  func (s *dbStore) SharedVar(n string) (string, error) {
    21  	var value string
    22  	err := s.db.View(func(tx *bolt.Tx) error {
    23  		b := tx.Bucket([]byte(bucketSharedVar))
    24  		v := b.Get([]byte(n))
    25  		if v == nil {
    26  			return ErrNoSharedVar
    27  		}
    28  		value = string(v)
    29  		return nil
    30  	})
    31  	return value, err
    32  }
    33  
    34  // SetSharedVar sets the value of a shared variable.
    35  func (s *dbStore) SetSharedVar(n, v string) error {
    36  	return s.db.Update(func(tx *bolt.Tx) error {
    37  		b := tx.Bucket([]byte(bucketSharedVar))
    38  		return b.Put([]byte(n), []byte(v))
    39  	})
    40  }
    41  
    42  // DelSharedVar deletes a shared variable.
    43  func (s *dbStore) DelSharedVar(n string) error {
    44  	return s.db.Update(func(tx *bolt.Tx) error {
    45  		b := tx.Bucket([]byte(bucketSharedVar))
    46  		return b.Delete([]byte(n))
    47  	})
    48  }