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  }