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(¶meters.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 }