package io.apibuilder.spec.v0.models;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.IOException;
import java.lang.Object;
import java.lang.Override;
import java.lang.String;
import java.util.Arrays;

/**
 * Generated by API Builder - https://www.apibuilder.io
 * Service version: 0.16.48
 * User agent: apibuilder app.apibuilder.io/apicollective/apibuilder-spec/0.16.48/android_rx2_client
 *
 * WARNING: not all features (notably unions) and data types work with android generator yet.  
 * Android generator is designed to be used in an android application, but should work in any java codebase as long as you import jackson, retrofit2 and RxJava2 libraries.  
 * If you are considering using this library, would like to request/discuss features, or would like to share how you're using it, please contact android-feedback@gilt.com 
 *
 */
@JsonIgnoreProperties(
    ignoreUnknown = true
)
public class Enum {
  private final String name;

  private final String plural;

  private final String description;

  private final Deprecation deprecation;

  private final EnumValue[] values;

  private final Attribute[] attributes;

  @JsonCreator
  public Enum(@JsonProperty("name") String name, @JsonProperty("plural") String plural,
      @JsonProperty("description") String description,
      @JsonProperty("deprecation") Deprecation deprecation,
      @JsonProperty("values") EnumValue[] values,
      @JsonProperty("attributes") Attribute[] attributes) {
    this.name = name;
    this.plural = plural;
    this.description = description;
    this.deprecation = deprecation;
    this.values = values;
    this.attributes = attributes;
  }

  public String getName() {
    return name;
  }

  public String getPlural() {
    return plural;
  }

  public String getDescription() {
    return description;
  }

  public Deprecation getDeprecation() {
    return deprecation;
  }

  public EnumValue[] getValues() {
    return values;
  }

  public Attribute[] getAttributes() {
    return attributes;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Enum that = (Enum) o;
    if (name != null ? !name.equals(that.name) : that.name != null) return false;
    if (plural != null ? !plural.equals(that.plural) : that.plural != null) return false;
    if (description != null ? !description.equals(that.description) : that.description != null) return false;
    if (deprecation != null ? !deprecation.equals(that.deprecation) : that.deprecation != null) return false;
    if (!Arrays.equals(values, that.values)) return false;
    if (!Arrays.equals(attributes, that.attributes)) return false;
    return true;
  }

  @Override
  public int hashCode() {
    int result = 0;
    result = 31 * result + (name != null ? name.hashCode() : 0);
    result = 31 * result + (plural != null ? plural.hashCode() : 0);
    result = 31 * result + (description != null ? description.hashCode() : 0);
    result = 31 * result + (deprecation != null ? deprecation.hashCode() : 0);
    result = 31 * result + (values != null ? values.hashCode() : 0);
    result = 31 * result + (attributes != null ? attributes.hashCode() : 0);
    return result;
  }

  public String toJsonString() throws JsonProcessingException {
    return io.apibuilder.spec.v0.android.ApiBuilderObjectMapper.getInstance().writeValueAsString(this);
  }

  public static Enum parseJson(String json) throws IOException {
    return io.apibuilder.spec.v0.android.ApiBuilderObjectMapper.getInstance().readValue( json, Enum.class);
  }
}