001package io.prometheus.metrics.model.snapshots;
002
003import io.prometheus.metrics.annotations.StableApi;
004import java.util.Objects;
005
006/** Utility for iterating over {@link Labels}. */
007@StableApi
008public final class Label implements Comparable<Label> {
009
010  private final String name;
011  private final String value;
012
013  public Label(String name, String value) {
014    this.name = name;
015    this.value = value;
016  }
017
018  public String getName() {
019    return name;
020  }
021
022  public String getValue() {
023    return value;
024  }
025
026  @Override
027  public int compareTo(Label other) {
028    int nameCompare = name.compareTo(other.name);
029    return nameCompare != 0 ? nameCompare : value.compareTo(other.value);
030  }
031
032  @Override
033  public String toString() {
034    return "Label{" + "name='" + name + '\'' + ", value='" + value + '\'' + '}';
035  }
036
037  @Override
038  public boolean equals(Object o) {
039    if (this == o) {
040      return true;
041    }
042    if (o == null || getClass() != o.getClass()) {
043      return false;
044    }
045    Label label = (Label) o;
046    return Objects.equals(name, label.name) && Objects.equals(value, label.value);
047  }
048
049  @Override
050  public int hashCode() {
051    return Objects.hash(name, value);
052  }
053}