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 }