github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/types/jsonconcat/marshal.go (about) 1 package jsonconcat 2 3 import ( 4 "fmt" 5 6 "github.com/lmorg/murex/lang" 7 "github.com/lmorg/murex/utils" 8 "github.com/lmorg/murex/utils/json" 9 ) 10 11 func marshal(p *lang.Process, v interface{}) ([]byte, error) { 12 var ( 13 b, jsonl []byte 14 err error 15 ) 16 17 switch t := v.(type) { 18 case []string: 19 for i := range t { 20 jsonl = append(jsonl, []byte(t[i])...) 21 jsonl = append(jsonl, utils.NewLineByte...) 22 } 23 return jsonl, nil 24 25 case []interface{}: 26 for i := range t { 27 b, err = json.Marshal(t[i], p.Stdout.IsTTY()) 28 if err != nil { 29 err = fmt.Errorf("unable to marshal %T on line %d: %s", v.([]interface{})[i], i, err) 30 return nil, err 31 } 32 33 jsonl = append(jsonl, b...) 34 jsonl = append(jsonl, utils.NewLineByte...) 35 } 36 37 return jsonl, nil 38 39 case [][]string: 40 for i := range t { 41 b, err = json.Marshal(t[i], false) 42 if err != nil { 43 err = fmt.Errorf("unable to marshal %T on line %d: %s", v.([][]string)[i], i, err) 44 return nil, err 45 } 46 47 jsonl = append(jsonl, b...) 48 jsonl = append(jsonl, utils.NewLineByte...) 49 } 50 51 return jsonl, nil 52 53 case [][]interface{}: 54 for i := range t { 55 b, err = json.Marshal(t[i], false) 56 if err != nil { 57 err = fmt.Errorf("unable to marshal %T on line %d: %s", v.([][]interface{})[i], i, err) 58 return nil, err 59 } 60 61 jsonl = append(jsonl, b...) 62 jsonl = append(jsonl, utils.NewLineByte...) 63 } 64 65 return jsonl, nil 66 67 default: 68 return nil, fmt.Errorf("cannot marshal data into concatenated JSON. Expecting a slice instead received %T", v) 69 } 70 }