Implement functions, arrays, maps, and while loops. Document and clean up code.
This commit is contained in:
+37
-1
@@ -20,6 +20,7 @@ import (
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// Default function to convert unnamed argument to a string using fmt.Sprint
|
||||
func toString(args map[string]interface{}) (interface{}, error) {
|
||||
val, ok := args[""]
|
||||
if !ok {
|
||||
@@ -28,6 +29,7 @@ func toString(args map[string]interface{}) (interface{}, error) {
|
||||
return fmt.Sprint(val), nil
|
||||
}
|
||||
|
||||
// Default function to parse unnamed argument to a number using strconv.ParseFloat
|
||||
func parseNumber(args map[string]interface{}) (interface{}, error) {
|
||||
val, ok := args[""].(string)
|
||||
if !ok {
|
||||
@@ -36,10 +38,44 @@ func parseNumber(args map[string]interface{}) (interface{}, error) {
|
||||
return strconv.ParseFloat(val, 64)
|
||||
}
|
||||
|
||||
// Default function to parse unnamed argument to a boolean using strconv.ParseBool
|
||||
func parseBool(args map[string]interface{}) (interface{}, error) {
|
||||
val, ok := args[""].(string)
|
||||
if !ok {
|
||||
return nil, errors.New("no value provided")
|
||||
}
|
||||
return strconv.ParseBool(val)
|
||||
}
|
||||
}
|
||||
|
||||
// Default function to set the breakLoop variable to true, breaking any loops that may be running
|
||||
func setBreakLoop(_ map[string]interface{}) (interface{}, error) {
|
||||
// If a loop is running
|
||||
if loopRunning {
|
||||
// Set breakLoop to true, breaking the loop on next cycle
|
||||
breakLoop = true
|
||||
} else {
|
||||
return nil, errors.New("break not inside loop")
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Default function that returns an array with an appended element
|
||||
func appendArray(args map[string]interface{}) (interface{}, error) {
|
||||
// Attempt to get unnamed argument and assert as []interface{}
|
||||
val, ok := args[""].([]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("cannot append to non-array object")
|
||||
}
|
||||
// Attempt to get items argument and assert as []interface{}
|
||||
items, ok := args["items"].([]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("items argument invalid or not provided")
|
||||
}
|
||||
// For every item in items argument
|
||||
for _, item := range items {
|
||||
// Append to unnamed argument
|
||||
val = append(val, item)
|
||||
}
|
||||
// Return appended unnamed argument
|
||||
return val, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user