src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/vars/callback.go (about)

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