package co.jp.app.common; public class ApiResponse { private boolean success; private int code; private String message; private T data; private ApiResponse(ResultCode resultCode, T data) { this.code = resultCode.getCode(); this.message = resultCode.getMessage(); this.success = (resultCode.getCode() == ResultCode.SUCCESS.getCode()); this.data = data; } public static ApiResponse success(T data) { return new ApiResponse<>(ResultCode.SUCCESS, data); } public static ApiResponse success() { return success(null); } public static ApiResponse fail(ResultCode resultCode) { if (resultCode == ResultCode.SUCCESS) { throw new IllegalArgumentException("Cannot use SUCCESS ResultCode for fail method. Use a specific error code."); } return new ApiResponse<>(resultCode, null); } public static ApiResponse fail(ResultCode resultCode, T data) { if (resultCode == ResultCode.SUCCESS) { throw new IllegalArgumentException("Cannot use SUCCESS ResultCode for fail method. Use a specific error code."); } return new ApiResponse<>(resultCode, data); } public boolean isSuccess() { return success; } public int getCode() { return code; } public String getMessage() { return message; } public T getData() { return data; } @Override public String toString() { return "ApiResponse{" + "success=" + success + ", code=" + code + ", message='" + message + '\'' + ", data=" + data + '}'; } }