@@ -136,10 +136,25 @@ type Formatter func(proto.Message) (string, error)
136
136
func NewJSONFormatter (emitDefaults bool , resolver jsonpb.AnyResolver ) Formatter {
137
137
marshaler := jsonpb.Marshaler {
138
138
EmitDefaults : emitDefaults ,
139
- Indent : " " ,
140
139
AnyResolver : resolver ,
141
140
}
142
- return marshaler .MarshalToString
141
+ // Workaround for indentation issue in jsonpb with Any messages.
142
+ // Bug was originally fixed in https://github.com/golang/protobuf/pull/834
143
+ // but later re-introduced before the module was deprecated and frozen.
144
+ // If jsonpb is ever replaced with google.golang.org/protobuf/encoding/protojson
145
+ // this workaround will no longer be needed.
146
+ formatter := func (message proto.Message ) (string , error ) {
147
+ output , err := marshaler .MarshalToString (message )
148
+ if err != nil {
149
+ return "" , err
150
+ }
151
+ var buf bytes.Buffer
152
+ if err := json .Indent (& buf , []byte (output ), "" , " " ); err != nil {
153
+ return "" , err
154
+ }
155
+ return buf .String (), nil
156
+ }
157
+ return formatter
143
158
}
144
159
145
160
// NewTextFormatter returns a formatter that returns strings in the protobuf
@@ -274,11 +289,11 @@ func (r *anyResolver) Resolve(typeUrl string) (proto.Message, error) {
274
289
if ! ok {
275
290
return nil , fmt .Errorf ("unknown message: %s" , typeUrl )
276
291
}
277
- // populate any extensions for this message, too
278
- if exts , err := r .source .AllExtensionsForType (mname ); err ! = nil {
279
- return nil , err
280
- } else if err := r . er . AddExtension ( exts ... ); err != nil {
281
- return nil , err
292
+ // populate any extensions for this message, too (if there are any)
293
+ if exts , err := r .source .AllExtensionsForType (mname ); err = = nil {
294
+ if err := r . er . AddExtension ( exts ... ); err != nil {
295
+ return nil , err
296
+ }
282
297
}
283
298
284
299
if r .mf == nil {
0 commit comments