@@ -4,8 +4,11 @@ import (
44 "encoding/json"
55 "fmt"
66 "os"
7+ "strings"
78
9+ "github.com/pelletier/go-toml/v2"
810 "github.com/spf13/cobra"
11+ "gopkg.in/yaml.v3"
912
1013 "cl-parse/changelog"
1114 "cl-parse/git"
@@ -26,6 +29,7 @@ var cmd = &cobra.Command{
2629 latest , _ := cmd .Flags ().GetBool ("latest" )
2730 release , _ := cmd .Flags ().GetString ("release" )
2831 includeBody , _ := cmd .Flags ().GetBool ("include-body" )
32+ format , _ := cmd .Flags ().GetString ("format" )
2933
3034 if ver {
3135 fmt .Printf ("cl-parse v%s\n " , VERSION )
@@ -58,25 +62,25 @@ var cmd = &cobra.Command{
5862 fmt .Println ("No changelog entries found" )
5963 os .Exit (1 )
6064 }
61- jsonData , err := json . MarshalIndent (entries [0 ], "" , " " )
65+ outputData , err := marshalWithFormat (entries [0 ], format )
6266 if err != nil {
6367 fmt .Println (err )
6468 os .Exit (1 )
6569 }
66- fmt .Println (string (jsonData ))
70+ fmt .Println (string (outputData ))
6771 return
6872 }
6973
7074 if release != "" {
7175 found := false
7276 for _ , entry := range entries {
7377 if entry .Version == release {
74- jsonData , err := json . MarshalIndent (entry , "" , " " )
78+ outputData , err := marshalWithFormat (entry , format )
7579 if err != nil {
7680 fmt .Println (err )
7781 os .Exit (1 )
7882 }
79- fmt .Println (string (jsonData ))
83+ fmt .Println (string (outputData ))
8084 found = true
8185 break
8286 }
@@ -89,12 +93,12 @@ var cmd = &cobra.Command{
8993 }
9094
9195 // default to printing all entries
92- jsonData , err := json . MarshalIndent (entries , "" , " " )
96+ outputData , err := marshalWithFormat (entries , format )
9397 if err != nil {
9498 fmt .Println (err )
9599 os .Exit (1 )
96100 }
97- fmt .Println (string (jsonData ))
101+ fmt .Println (string (outputData ))
98102 },
99103}
100104
@@ -110,4 +114,18 @@ func init() {
110114 cmd .Flags ().BoolP ("latest" , "l" , false , "display the most recent version from the changelog" )
111115 cmd .Flags ().StringP ("release" , "r" , "" , "display the changelog entry for a specific release" )
112116 cmd .Flags ().Bool ("include-body" , false , "include the full commit body in changelog entry" )
117+ cmd .Flags ().StringP ("format" , "f" , "json" , "output format (json, yaml, or toml)" )
118+ }
119+
120+ func marshalWithFormat (v interface {}, format string ) ([]byte , error ) {
121+ switch strings .ToLower (format ) {
122+ case "json" :
123+ return json .MarshalIndent (v , "" , " " )
124+ case "yaml" :
125+ return yaml .Marshal (v )
126+ case "toml" :
127+ return toml .Marshal (v )
128+ default :
129+ return nil , fmt .Errorf ("unsupported format: %s" , format )
130+ }
113131}
0 commit comments