public void throwDtpException(String message)
      throws IOException, DestinationMemoryFullException, PermissionDeniedException {
    switch (toFatalState()) {
      case FATAL_STATE_FATAL_PERMISSION_DENIED:
        throw new PermissionDeniedException(
            "User access to microsoft onedrive was denied", toIoException(message));
      case FATAL_STATE_FATAL_DESTINATION_FULL:
        throw new DestinationMemoryFullException(
            "Microsoft destination storage limit reached", toIoException(message));
      case FATAL_STATE_FATAL_UNSPECIFIED:
        throw toIoException(String.format("%s: %s", CAUSE_PREFIX_UNRECOGNIZED_EXCEPTION, message));
    }
    throw new AssertionError("exhaustive switch");
  }
Maps current error state of this response to a DTP-standard exception, if the response seems OK
(note: this is nonsensical to call when not {@link isFatal}).

<p>DTP exceptions are usually found in {@link org.datatransferproject.spi.transfer.types}. The
base "cause" of exceptions constructed here will always at least be a read-out of the API
response itself, and possible some more explanatory text.

<p>Throws IllegalStateException if {@link isFatal} is false.
extensions/data-transfer/portability-data-transfer-microsoft/src/main/java/org/datatransferproject/transfer/microsoft/MicrosoftApiResponse.java