001package gudusoft.gsqlparser.catalog.runtime;
002
003import java.util.Objects;
004
005/**
006 * Stable identifier for a {@link CatalogProvider} implementation.
007 *
008 * <p>Plan ยง7.2. Used by {@link CatalogProviderRegistry} to look up providers registered via
009 * {@code META-INF/services/} or programmatically.</p>
010 */
011public final class CatalogProviderId {
012
013    private final String value;
014
015    private CatalogProviderId(String value) {
016        if (value == null || value.isEmpty()) {
017            throw new IllegalArgumentException("CatalogProviderId.value must be non-empty");
018        }
019        this.value = value;
020    }
021
022    public static CatalogProviderId of(String value) {
023        return new CatalogProviderId(value);
024    }
025
026    public String value() {
027        return value;
028    }
029
030    @Override
031    public boolean equals(Object o) {
032        if (this == o) return true;
033        if (!(o instanceof CatalogProviderId)) return false;
034        return value.equals(((CatalogProviderId) o).value);
035    }
036
037    @Override
038    public int hashCode() {
039        return Objects.hash(value);
040    }
041
042    @Override
043    public String toString() {
044        return "CatalogProviderId[" + value + "]";
045    }
046}