github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/eval/vars/callback.go (about)

     1  package vars
     2  
     3  import (
     4  	"github.com/markusbkk/elvish/pkg/eval/errs"
     5  )
     6  
     7  type callback struct {
     8  	set func(interface{}) error
     9  	get func() interface{}
    10  }
    11  
    12  // FromSetGet makes a variable from a set callback and a get callback.
    13  func FromSetGet(set func(interface{}) error, get func() interface{}) Var {
    14  	return &callback{set, get}
    15  }
    16  
    17  func (cv *callback) Set(val interface{}) error {
    18  	return cv.set(val)
    19  }
    20  
    21  func (cv *callback) Get() interface{} {
    22  	return cv.get()
    23  }
    24  
    25  type roCallback func() interface{}
    26  
    27  // FromGet makes a variable from a get callback. The variable is read-only.
    28  func FromGet(get func() interface{}) Var {
    29  	return roCallback(get)
    30  }
    31  
    32  func (cv roCallback) Set(interface{}) error {
    33  	return errs.SetReadOnlyVar{}
    34  }
    35  
    36  func (cv roCallback) Get() interface{} {
    37  	return cv()
    38  }