github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/types/columns/marshal.go (about)

     1  package columns
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/lmorg/murex/lang"
     7  	"github.com/lmorg/murex/lang/types"
     8  )
     9  
    10  func marshal(_ *lang.Process, iface interface{}) (b []byte, err error) {
    11  	switch v := iface.(type) {
    12  	case []string:
    13  		marshalSliceStr(v, b)
    14  		return
    15  
    16  	/*case [][]string:
    17  	for i := range v {
    18  		b = append(b, []byte(strings.Join(v[i], "\t")+utils.NewLineString)...)
    19  	}
    20  	return*/
    21  
    22  	case []interface{}:
    23  		for i := range v {
    24  			b = append(b, iface2str(&v[i])...)
    25  		}
    26  		return
    27  
    28  	/*case map[string]string:
    29  		for s := range v {
    30  			b = append(b, []byte(s+": "+v[s]+utils.NewLineString)...)
    31  		}
    32  		return
    33  	case map[string]interface{}:
    34  		for s := range v {
    35  			b = append(b, []byte(fmt.Sprintf("%s: %s%s", s, fmt.Sprint(v[s]), utils.NewLineString))...)
    36  		}
    37  		return
    38  	case map[interface{}]interface{}:
    39  		for s := range v {
    40  			b = append(b, []byte(fmt.Sprintf("%s: %s%s", fmt.Sprint(s), fmt.Sprint(v[s]), utils.NewLineString))...)
    41  		}
    42  		return
    43  	case map[interface{}]string:
    44  		for s := range v {
    45  			b = append(b, []byte(fmt.Sprintf("%s: %s%s", fmt.Sprint(s), v[s], utils.NewLineString))...)
    46  		}
    47  		return
    48  	case interface{}:
    49  		return []byte(fmt.Sprintln(iface)), nil*/
    50  
    51  	default:
    52  		err = fmt.Errorf("i don't know how to marshal that data into a `%s`. Data possibly too complex?", types.Columns)
    53  		return
    54  	}
    55  }
    56  
    57  func marshalSliceStr(a []string, b []byte) {
    58  	for i := range a {
    59  		b = append(b, []byte(a[i]+"\t")...)
    60  	}
    61  }
    62  
    63  func iface2str(v *interface{}) (b []byte) {
    64  	return []byte(fmt.Sprintf("%v\t", *v))
    65  
    66  }
    67  
    68  /*func unmarshal(p *lang.Process) (interface{}, error) {
    69  	table := make([][]string, 1)
    70  	scanner := bufio.NewScanner(p.Stdin)
    71  	for scanner.Scan() {
    72  		table = append(table, rxWhitespace.Split(scanner.Text(), -1))
    73  	}
    74  	if len(table) > 1 {
    75  		table = table[1:]
    76  	}
    77  	err := scanner.Err()
    78  	return table, err
    79  }*/