package main import ( "bytes" "encoding/json" "fmt" "io" "os" ) // pretty formats one JSON value using two-space indentation. func pretty(src []byte) ([]byte, error) { var dst bytes.Buffer if err := json.Indent(&dst, src, "", " "); err != nil { return nil, err } dst.WriteByte('\n') return dst.Bytes(), nil } func main() { if len(os.Args) == 2 && os.Args[1] == "--self-test" { runTests() return } src, err := io.ReadAll(os.Stdin) if err != nil { exitErr(err) } out, err := pretty(src) if err != nil { exitErr(fmt.Errorf("invalid JSON: %w", err)) } if _, err := os.Stdout.Write(out); err != nil { exitErr(err) } } // runTests provides two small checks without requiring a separate test file. func runTests() { tests := []struct { input string want string }{ {`{"name":"Ada","active":true}`, "{\n \"name\": \"Ada\",\n \"active\": true\n}\n"}, {`[1,{"x":null}]`, "[\n 1,\n {\n \"x\": null\n }\n]\n"}, } for i, test := range tests { got, err := pretty([]byte(test.input)) if err != nil || string(got) != test.want { exitErr(fmt.Errorf("test %d failed: got %q, error %v", i+1, got, err)) } } fmt.Fprintln(os.Stderr, "tests passed") } func exitErr(err error) { fmt.Fprintln(os.Stderr, err) os.Exit(1) }