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

     1  package pretty
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"io"
     7  
     8  	"github.com/lmorg/murex/config/defaults"
     9  	"github.com/lmorg/murex/lang"
    10  	"github.com/lmorg/murex/lang/parameters"
    11  	"github.com/lmorg/murex/lang/types"
    12  )
    13  
    14  func init() {
    15  	//lang.GoFunctions["pretty"] = cmdPretty
    16  	lang.DefineMethod("pretty", cmdPretty, types.Json, types.Json)
    17  
    18  	defaults.AppendProfile(`
    19  		autocomplete: set pretty { [{
    20  			"Flags": [ "--strict" ]
    21  		}] }
    22  	`)
    23  }
    24  
    25  func cmdPretty(p *lang.Process) error {
    26  	if err := p.ErrIfNotAMethod(); err != nil {
    27  		return err
    28  	}
    29  
    30  	flags, _, err := p.Parameters.ParseFlags(&parameters.Arguments{
    31  		Flags: map[string]string{
    32  			"--strict": "bool",
    33  		},
    34  	})
    35  	if err != nil {
    36  		return err
    37  	}
    38  
    39  	switch {
    40  	case flags["--strict"] == types.TrueString:
    41  		return prettyStrict(p)
    42  	default:
    43  		return prettyDefault(p)
    44  	}
    45  }
    46  
    47  func prettyStrict(p *lang.Process) error {
    48  	dt := p.Stdin.GetDataType()
    49  	p.Stdout.SetDataType(dt)
    50  
    51  	if dt == types.Json {
    52  		b, err := p.Stdin.ReadAll()
    53  		if err != nil {
    54  			return err
    55  		}
    56  
    57  		var prettyJSON bytes.Buffer
    58  		err = json.Indent(&prettyJSON, b, "", "    ")
    59  		if err != nil {
    60  			return err
    61  		}
    62  
    63  		_, err = p.Stdout.Write(prettyJSON.Bytes())
    64  		return err
    65  	}
    66  
    67  	_, err := io.Copy(p.Stdout, p.Stdin)
    68  	return err
    69  }
    70  
    71  func prettyDefault(p *lang.Process) error {
    72  	p.Stdout.SetDataType(types.Json)
    73  
    74  	b, err := p.Stdin.ReadAll()
    75  	if err != nil {
    76  		return err
    77  	}
    78  
    79  	var prettyJSON bytes.Buffer
    80  	err = json.Indent(&prettyJSON, b, "", "    ")
    81  	if err != nil {
    82  		return err
    83  	}
    84  
    85  	_, err = p.Stdout.Write(prettyJSON.Bytes())
    86  	return err
    87  }