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 }*/