class SelfDescribingObject {

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (!(obj instanceof SelfDescribingObject)) {
      return false;
    }
    SelfDescribingObject rhs = (SelfDescribingObject) obj;
    return Objects.equals(_name, rhs._name)
        && _schema.equals(rhs._schema)
        && Objects.equals(_value, rhs._value);
  }

  public  SelfDescribingObject(Schema schema, @Nullable Object value);
  public  SelfDescribingObject(@Nullable String name, Schema schema, @Nullable Object value);

}