code: func (e Enum) JSONMarshal(v interface{}) ([]byte, error) {
  	key := e.GetKey(v)
  	data, err := json.Marshal(&key)
  	if err != nil {
  		return nil, err
  	}
  	return data, nil
  }
docs: // JSONMarshal implements json.Marshaler's MarshalJSON semantics. It marshals
  // the value in the supplied interface to its associated key and emits a quoted
  // string containing that key.
  //
  // The interface, v, must be a valid pointer to the mapped enumeration type.