github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/config/eval.go (about) 1 package cmdconfig 2 3 import ( 4 "errors" 5 6 "github.com/lmorg/murex/lang" 7 "github.com/lmorg/murex/lang/types" 8 ) 9 10 func evalConfig(p *lang.Process) error { 11 p.Stdout.SetDataType(types.Null) 12 13 app, err := p.Parameters.String(1) 14 if err != nil { 15 return err 16 } 17 18 key, err := p.Parameters.String(2) 19 if err != nil { 20 return err 21 } 22 23 block, err := p.Parameters.Block(3) 24 if err != nil { 25 return err 26 } 27 28 dataType := p.Config.DataType(app, key) 29 30 v, err := p.Config.Get(app, key, dataType) 31 if err != nil { 32 return err 33 } 34 35 fork := p.Fork(lang.F_PARENT_VARTABLE | lang.F_CREATE_STDIN | lang.F_CREATE_STDOUT) 36 fork.Stdin.SetDataType(dataType) 37 38 _, err = fork.Stdin.Write([]byte(v.(string))) 39 if err != nil { 40 return errors.New("Couldn't write to eval's stdin: " + err.Error()) 41 } 42 43 p.ExitNum, err = fork.Execute(block) 44 if err != nil { 45 return err 46 } 47 48 b, err := fork.Stdout.ReadAll() 49 if err != nil { 50 return err 51 } 52 53 return p.Config.Set(app, key, string(b), p.FileRef) 54 }