code: func (p *Policy) UnmarshalJSON(data []byte) error {
  	var fields map[string]*json.RawMessage
  	if err := json.Unmarshal(data, &fields); err != nil {
  		return err
  	}
  
  	newOne := Policy{
  		Bindings:           make(PolicyBindings),
  		UnrecognizedFields: fields,
  	}
  
  	if raw, ok := fields["bindings"]; ok && raw != nil {
  		delete(fields, "bindings")
  		if err := json.Unmarshal([]byte(*raw), &newOne.Bindings); err != nil {
  			return err
  		}
  	}
  
  	if raw, ok := fields["etag"]; ok && raw != nil {
  		delete(fields, "etag")
  		if err := json.Unmarshal([]byte(*raw), &newOne.Etag); err != nil {
  			return err
  		}
  	}
  
  	*p = newOne
  	return nil
  }
docs: // UnmarshalJSON is part of json.Unmarshaler interface.