github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/expressions/expressions.go (about) 1 package expressions 2 3 import ( 4 "github.com/lmorg/murex/lang" 5 "github.com/lmorg/murex/lang/expressions" 6 "github.com/lmorg/murex/lang/types" 7 ) 8 9 func init() { 10 lang.DefineFunction(lang.ExpressionFunctionName, cmdExpressions, types.Any) 11 } 12 13 func cmdExpressions(p *lang.Process) error { 14 expression := []rune(p.Parameters.StringAll()) 15 16 result, err := expressions.ExecuteExpr(p, expression) 17 if err != nil { 18 return err 19 } 20 21 val, err := result.GetValue() 22 if err != nil { 23 return err 24 } 25 26 p.Stdout.SetDataType(val.DataType) 27 28 if val.Value == nil && val.DataType == types.Json { 29 _, err = p.Stdout.Write([]byte{'n', 'u', 'l', 'l'}) 30 return err 31 } 32 33 var b []byte 34 35 switch val.Value.(type) { 36 case string: 37 b = []byte(val.Value.(string)) 38 default: 39 b, err = lang.MarshalData(p, val.DataType, val.Value) 40 if err != nil { 41 return err 42 } 43 } 44 45 if val.DataType == types.Boolean { 46 if !types.IsTrue(b, 0) { 47 p.ExitNum = 1 48 } 49 if p.Next.OperatorLogicAnd || p.Next.OperatorLogicOr { 50 return nil 51 } 52 } 53 54 _, err = p.Stdout.Write(b) 55 return err 56 }