code: func DeepMarshalJSON(w io.Writer, msg proto.Message) error {
  	root, err := recursivelyCreateTreeFromMessage(msg)
  	if err != nil {
  		return err
  	}
  
  	encoder := json.NewEncoder(w)
  	encoder.SetIndent("", "\t")
  	return encoder.Encode(root)
  }
docs: // DeepMarshalJSON marshals msg to w as JSON, but instead of marshaling bytes fields which contain nested
  // marshaled messages as base64 (like the standard proto encoding), these nested messages are remarshaled
  // as the JSON representation of those messages.  This is done so that the JSON representation is as non-binary
  // and human readable as possible.