github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/config/cmd.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 "github.com/lmorg/murex/utils/json" 9 ) 10 11 func init() { 12 lang.DefineFunction("config", cmdConfig, types.Any) 13 lang.DefineFunction("!config", bangConfig, types.Null) 14 } 15 16 func cmdConfig(p *lang.Process) error { 17 if p.Parameters.Len() == 0 { 18 return allConfig(p) 19 } 20 21 option, _ := p.Parameters.String(0) 22 switch option { 23 case "get": 24 return getConfig(p) 25 26 case "set": 27 return setConfig(p) 28 29 case "eval": 30 return evalConfig(p) 31 32 case "define": 33 return defineConfig(p) 34 35 case "default": 36 return defaultConfig(p) 37 38 default: 39 p.Stdout.SetDataType(types.Null) 40 return errors.New("unknown option. Please get, set, eval, default or define") 41 } 42 } 43 44 func allConfig(p *lang.Process) error { 45 p.Stdout.SetDataType(types.Json) 46 47 b, err := json.Marshal(p.Config.DumpConfig(), p.Stdout.IsTTY()) 48 if err != nil { 49 return err 50 } 51 52 _, err = p.Stdout.Writeln(b) 53 return err 54 } 55 56 func getConfig(p *lang.Process) error { 57 app, _ := p.Parameters.String(1) 58 key, _ := p.Parameters.String(2) 59 val, err := p.Config.Get(app, key, types.String) 60 if err != nil { 61 return err 62 } 63 p.Stdout.SetDataType(p.Config.DataType(app, key)) 64 p.Stdout.Writeln([]byte(val.(string))) 65 return nil 66 } 67 68 func setConfig(p *lang.Process) error { 69 p.Stdout.SetDataType(types.Null) 70 app, _ := p.Parameters.String(1) 71 key, _ := p.Parameters.String(2) 72 var val string 73 74 if p.IsMethod { 75 b, err := p.Stdin.ReadAll() 76 if err != nil { 77 return err 78 } 79 val = string(b) 80 81 } else { 82 val, _ = p.Parameters.String(3) 83 } 84 85 return p.Config.Set(app, key, val, p.FileRef) 86 } 87 88 func defaultConfig(p *lang.Process) error { 89 app, _ := p.Parameters.String(1) 90 key, _ := p.Parameters.String(2) 91 return p.Config.Default(app, key, p.FileRef) 92 } 93 94 func bangConfig(p *lang.Process) error { 95 app, _ := p.Parameters.String(0) 96 key, _ := p.Parameters.String(1) 97 return p.Config.Default(app, key, p.FileRef) 98 }