71 lines
2.4 KiB
Swift
71 lines
2.4 KiB
Swift
//
|
|
// CustomError.swift
|
|
// Nextcloud Cookbook iOS Client
|
|
//
|
|
// Created by Vincent Meilinger on 13.09.23.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
|
|
public enum NotImplementedError: Error, CustomStringConvertible {
|
|
case notImplemented
|
|
public var description: String {
|
|
return "Function not implemented."
|
|
}
|
|
}
|
|
|
|
public enum NetworkError: String, Error {
|
|
case missingUrl = "Missing URL."
|
|
case parametersNil = "Parameters are nil."
|
|
case encodingFailed = "Parameter encoding failed."
|
|
case decodingFailed = "Data decoding failed."
|
|
case redirectionError = "Redirection error"
|
|
case clientError = "Client error"
|
|
case serverError = "Server error"
|
|
case invalidRequest = "Invalid request"
|
|
case unknownError = "Unknown error"
|
|
case dataError = "Invalid data error."
|
|
}
|
|
|
|
public enum ServerError: Error {
|
|
case unknownError, missingRequestBody, duplicateRecipe, noImage, missingRecipeName, recipeNotFound, deleteFailed, requestUnsuccessful
|
|
|
|
|
|
static func decodeFromURLResponse(response: HTTPURLResponse?) -> ServerError? {
|
|
guard let response = response else {
|
|
return ServerError.unknownError
|
|
}
|
|
print("Status code: ", response.statusCode)
|
|
switch response.statusCode {
|
|
case 200...299: return nil
|
|
case 400: return .missingRequestBody
|
|
case 404: return .recipeNotFound
|
|
case 409: return .duplicateRecipe
|
|
case 406: return .noImage
|
|
case 422: return .missingRecipeName
|
|
case 500: return .requestUnsuccessful
|
|
case 502: return .deleteFailed
|
|
default: return ServerError.unknownError
|
|
}
|
|
}
|
|
|
|
var localizedDescription: LocalizedStringKey {
|
|
switch self {
|
|
case .noImage: return "The recipe has no image whose MIME type matches the Accept header"
|
|
case .missingRecipeName: return "There was no name in the request given for the recipe. Cannot save the recipe."
|
|
default: return "An unknown server error occured."
|
|
}
|
|
}
|
|
|
|
var localizedTitle: LocalizedStringKey {
|
|
switch self {
|
|
case .missingRequestBody: return "Missing Request Body"
|
|
case .duplicateRecipe: return "Duplicate Recipe"
|
|
case .noImage: return "Image MIME Error"
|
|
case .missingRecipeName: return "Missing Name"
|
|
default: return "Error"
|
|
}
|
|
}
|
|
}
|