Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/java/org/neocities/api/BaseResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
26 changes: 24 additions & 2 deletions src/main/java/org/neocities/api/NeoCitiesApiError.java
Original file line number Diff line number Diff line change
@@ -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())
Expand All @@ -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<BaseResponse> getError() {
return Optional.ofNullable(error);
}
}