github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/arraytools/addheading.go (about)

     1  package arraytools
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/lmorg/murex/lang"
     7  	"github.com/lmorg/murex/lang/types"
     8  )
     9  
    10  func init() {
    11  	lang.DefineMethod("addheading", cmdAddHeading, types.Unmarshal, types.Marshal)
    12  }
    13  
    14  func cmdAddHeading(p *lang.Process) error {
    15  	dt := p.Stdin.GetDataType()
    16  	p.Stdout.SetDataType(dt)
    17  
    18  	if err := p.ErrIfNotAMethod(); err != nil {
    19  		return err
    20  	}
    21  
    22  	v, err := lang.UnmarshalData(p, dt)
    23  	if err != nil {
    24  		return err
    25  	}
    26  
    27  	switch t := v.(type) {
    28  	case [][]string:
    29  		v = append([][]string{p.Parameters.StringArray()}, t...)
    30  
    31  	default:
    32  		return fmt.Errorf("this doesn't appear to be a table or I don't know how to tabulate `%T`", v)
    33  	}
    34  
    35  	b, err := lang.MarshalData(p, dt, v)
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	_, err = p.Stdout.Write(b)
    41  	return err
    42  }