ErrorKind.java
package com.surrealdb;
import java.util.HashMap;
import java.util.Map;
/**
* Machine-readable error kind, aligned with the SurrealDB Rust SDK's
* {@code ErrorDetails} enum.
*
* <p>
* Returned by {@link ServerException#getKindEnum()}. Use this for type-safe
* matching instead of {@link ServerException#getKind()} when the kind is known.
* For unknown (future) kinds, {@link #UNKNOWN} is used and the raw string is
* available via {@link ServerException#getKind()}.
*/
public enum ErrorKind {
VALIDATION("Validation"), CONFIGURATION("Configuration"), THROWN("Thrown"), QUERY("Query"), SERIALIZATION(
"Serialization"), NOT_ALLOWED("NotAllowed"), NOT_FOUND(
"NotFound"), ALREADY_EXISTS("AlreadyExists"), CONNECTION("Connection"), INTERNAL("Internal"),
/**
* Unknown kind from a newer server; raw string is in
* {@link ServerException#getKind()}.
*/
UNKNOWN(null);
private static final Map<String, ErrorKind> LOOKUP;
static {
LOOKUP = new HashMap<>();
for (ErrorKind k : values()) {
if (k.raw != null) {
LOOKUP.put(k.raw, k);
}
}
}
private final String raw;
ErrorKind(String raw) {
this.raw = raw;
}
/**
* Resolves a kind string from the wire to an enum constant. Unknown strings
* return {@link #UNKNOWN}.
*
* @param kind
* the kind string (e.g. from the server)
* @return the matching enum constant, or {@link #UNKNOWN}
*/
public static ErrorKind fromString(String kind) {
if (kind == null) {
return UNKNOWN;
}
return LOOKUP.getOrDefault(kind, UNKNOWN);
}
/**
* Returns the wire string for this kind, or {@code null} for {@link #UNKNOWN}.
*/
public String getRaw() {
return raw;
}
}