diff --git a/src/main/java/org/neocities/api/BaseResponse.java b/src/main/java/org/neocities/api/BaseResponse.java index f15ebcc..b5d953c 100644 --- a/src/main/java/org/neocities/api/BaseResponse.java +++ b/src/main/java/org/neocities/api/BaseResponse.java @@ -3,6 +3,7 @@ public class BaseResponse { public static final String SUCCESS = "success"; + public static final String ERROR = "error"; private String result; private String error_type; diff --git a/src/main/java/org/neocities/api/NeoCitiesApiError.java b/src/main/java/org/neocities/api/NeoCitiesApiError.java index bebec59..ec6ccbe 100644 --- a/src/main/java/org/neocities/api/NeoCitiesApiError.java +++ b/src/main/java/org/neocities/api/NeoCitiesApiError.java @@ -1,7 +1,15 @@ package org.neocities.api; +import java.util.Optional; + public class NeoCitiesApiError extends RuntimeException { + /** + * The actual error response from the neocities API. + * Will be null if this exception was not built from a response. + */ + public final BaseResponse error; + public static NeoCitiesApiError fromResponse(final BaseResponse instance) { final String message = new StringBuilder("API returned unexpected result: '") .append(instance.getResult()) @@ -11,14 +19,28 @@ public static NeoCitiesApiError fromResponse(final BaseResponse instance) { .append(instance.getMessage()) .append(").") .toString(); - return new NeoCitiesApiError(message); + return new NeoCitiesApiError(message, instance); } - public NeoCitiesApiError(final String message) { + private NeoCitiesApiError(final String message, final BaseResponse instance){ super(message); + error = instance; + } + + public NeoCitiesApiError(final String message) { + this(message, null); } public NeoCitiesApiError(final Throwable cause) { super(cause); + error = null; + } + + /** + * Safely provides access to the error response from Neocities (if present) + * @return the value of {@link NeoCitiesApiError#error} wrapped in an {@link Optional} + */ + public Optional getError() { + return Optional.ofNullable(error); } }