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 }