github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/open/openagent.go (about) 1 package open 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/lmorg/murex/lang" 8 "github.com/lmorg/murex/lang/types" 9 ) 10 11 func init() { 12 lang.DefineFunction("openagent", shell, types.Generic) 13 lang.DefineFunction("!openagent", shell, types.Null) 14 } 15 16 const usage = "Please use `get` or `set` (or use the bang (!) to unset) followed by a murex data-type" 17 18 func shell(p *lang.Process) error { 19 p.Stdout.SetDataType(types.Generic) 20 21 if p.IsNot { 22 dataType, err := p.Parameters.String(0) 23 if err != nil { 24 return err 25 } 26 return OpenAgents.Unset(dataType) 27 } 28 29 flag, err := p.Parameters.String(0) 30 if err != nil { 31 return errors.New(err.Error() + ". " + usage) 32 } 33 34 dataType, err := p.Parameters.String(1) 35 if err != nil { 36 return errors.New(err.Error() + ". " + usage) 37 } 38 39 switch flag { 40 case "get": 41 agent, err := OpenAgents.Get(dataType) 42 if err != nil { 43 return err 44 } 45 _, err = p.Stdout.Write([]byte(string(agent.Block))) 46 return err 47 48 case "set": 49 block, err := p.Parameters.Block(2) 50 if err != nil { 51 return err 52 } 53 OpenAgents.Set(dataType, block, p.FileRef) 54 return nil 55 56 default: 57 return fmt.Errorf("invalid option\n%s", usage) 58 } 59 }