content: package allen.town.podcast.core.util;
  
  import androidx.annotation.StringRes;
  import allen.town.podcast.core.BuildConfig;
  import allen.town.podcast.core.R;
  import allen.town.podcast.model.download.DownloadError;
  
  /**
   * Provides user-visible labels for download errors.
   */
  public class DownloadErrorLabel {
  
      @StringRes
      public static int from(DownloadError error) {
          switch (error) {
              case SUCCESS: return R.string.download_successful;
              case ERROR_PARSER_EXCEPTION: return R.string.download_error_parser_exception;
              case ERROR_UNSUPPORTED_TYPE: return R.string.download_error_unsupported_type;
              case ERROR_CONNECTION_ERROR: return R.string.download_error_connection_error;
              case ERROR_MALFORMED_URL: return R.string.download_error_error_unknown;
              case ERROR_IO_ERROR: return R.string.download_error_io_error;
              case ERROR_FILE_EXISTS: return R.string.download_error_error_unknown;
              case ERROR_DOWNLOAD_CANCELLED: return R.string.download_canceled_msg;
              case ERROR_DEVICE_NOT_FOUND: return R.string.download_error_device_not_found;
              case ERROR_HTTP_DATA_ERROR: return R.string.download_error_http_data_error;
              case ERROR_NOT_ENOUGH_SPACE: return R.string.download_error_insufficient_space;
              case ERROR_UNKNOWN_HOST: return R.string.download_error_unknown_host;
              case ERROR_REQUEST_ERROR: return R.string.download_error_request_error;
              case ERROR_DB_ACCESS_ERROR: return R.string.download_error_db_access;
              case ERROR_UNAUTHORIZED: return R.string.download_error_unauthorized;
              case ERROR_FILE_TYPE: return R.string.download_error_file_type_type;
              case ERROR_FORBIDDEN: return R.string.download_error_forbidden;
              case ERROR_IO_WRONG_SIZE: return R.string.download_error_wrong_size;
              case ERROR_IO_BLOCKED: return R.string.download_error_blocked;
              case ERROR_UNSUPPORTED_TYPE_HTML: return R.string.download_error_unsupported_type_html;
              case ERROR_NOT_FOUND: return R.string.download_error_not_found;
              case ERROR_CERTIFICATE: return R.string.download_error_certificate;
              case ERROR_PARSER_EXCEPTION_DUPLICATE: return R.string.download_error_parser_exception;
              default:
                  if (BuildConfig.DEBUG) {
                      throw new IllegalArgumentException("No mapping from download error to label");
                  }
                  return R.string.download_error_error_unknown;
          }
      }
  }
  