code: func (p Policy) MarshalJSON() ([]byte, error) {
  	// We have to use *json.RawMessage instead of json.RawMessage because
  	// otherwise json reflection magic gets confused and serializes
  	// json.RawMessage as []byte. See http://play.golang.org/p/iid7Xthp-_.
  	fields := make(map[string]*json.RawMessage, len(p.UnrecognizedFields)+2)
  	for k, v := range p.UnrecognizedFields {
  		fields[k] = v
  	}
  
  	blob, err := json.Marshal(p.Bindings)
  	if err != nil {
  		return nil, err
  	}
  	bindings := json.RawMessage(blob)
  	fields["bindings"] = &bindings
  
  	blob, err = json.Marshal(p.Etag)
  	if err != nil {
  		return nil, err
  	}
  	etag := json.RawMessage(blob)
  	fields["etag"] = &etag
  
  	return json.Marshal(fields)
  }
docs: // MarshalJSON is part of json.Marshaler interface.