github.com/defang-io/defang/src@v0.0.0-20240505002154-bdf411911834/pkg/cli/common.go (about) 1 package cli 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 8 "google.golang.org/protobuf/encoding/protojson" 9 "google.golang.org/protobuf/proto" 10 "gopkg.in/yaml.v3" 11 ) 12 13 var ( 14 DoDryRun = false 15 16 ErrDryRun = errors.New("dry run") 17 ) 18 19 func MarshalPretty(root string, data proto.Message) ([]byte, error) { 20 // HACK: convert to JSON first so we respect the json tags (like "omitempty") 21 bytes, err := protojson.Marshal(data) 22 if err != nil { 23 return nil, err 24 } 25 var raw map[string]interface{} // TODO: this messes with the order of the fields 26 if err := json.Unmarshal(bytes, &raw); err != nil { 27 return nil, err 28 } 29 if root != "" { 30 raw = map[string]interface{}{root: raw} 31 } 32 return yaml.Marshal(raw) 33 } 34 35 func PrintObject(root string, data proto.Message) error { 36 bytes, err := MarshalPretty(root, data) 37 if err != nil { 38 return err 39 } 40 // TODO: add color 41 fmt.Println(string(bytes)) 42 return nil 43 }