chore: add error detail
This commit is contained in:
parent
0e96a2f1d0
commit
0cb8d1bf6e
|
@ -19,10 +19,12 @@ extension Mastodon.Entity {
|
|||
public struct Error: Codable {
|
||||
public let error: String
|
||||
public let errorDescription: String?
|
||||
public let details: ErrorDetail?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case error
|
||||
case errorDescription = "error_description"
|
||||
case details
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
//
|
||||
// Mastodon+Entity+ErrorDetail.swift
|
||||
//
|
||||
//
|
||||
// Created by sxiaojian on 2021/3/1.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
extension Mastodon.Entity.Error {
|
||||
/// ERR_BLOCKED When e-mail provider is not allowed
|
||||
/// ERR_UNREACHABLE When e-mail address does not resolve to any IP via DNS (MX, A, AAAA)
|
||||
/// ERR_TAKEN When username or e-mail are already taken
|
||||
/// ERR_RESERVED When a username is reserved, e.g. "webmaster" or "admin"
|
||||
/// ERR_ACCEPTED When agreement has not been accepted
|
||||
/// ERR_BLANK When a required attribute is blank
|
||||
/// ERR_INVALID When an attribute is malformed, e.g. wrong characters or invalid e-mail address
|
||||
/// ERR_TOO_LONG When an attribute is over the character limit
|
||||
/// ERR_INCLUSION When an attribute is not one of the allowed values, e.g. unsupported locale
|
||||
public enum SignUpError: RawRepresentable, Codable {
|
||||
case ERR_BLOCKED
|
||||
case ERR_UNREACHABLE
|
||||
case ERR_TAKEN
|
||||
case ERR_RESERVED
|
||||
case ERR_ACCEPTED
|
||||
case ERR_BLANK
|
||||
case ERR_INVALID
|
||||
case ERR_TOO_LONG
|
||||
case ERR_TOO_SHORT
|
||||
case ERR_INCLUSION
|
||||
case _other(String)
|
||||
|
||||
public init?(rawValue: String) {
|
||||
switch rawValue {
|
||||
case "ERR_BLOCKED": self = .ERR_BLOCKED
|
||||
case "ERR_UNREACHABLE": self = .ERR_UNREACHABLE
|
||||
case "ERR_TAKEN": self = .ERR_TAKEN
|
||||
case "ERR_RESERVED": self = .ERR_RESERVED
|
||||
case "ERR_ACCEPTED": self = .ERR_ACCEPTED
|
||||
case "ERR_BLANK": self = .ERR_BLANK
|
||||
case "ERR_INVALID": self = .ERR_INVALID
|
||||
case "ERR_TOO_LONG": self = .ERR_TOO_LONG
|
||||
case "ERR_TOO_SHORT": self = .ERR_TOO_SHORT
|
||||
case "ERR_INCLUSION": self = .ERR_INCLUSION
|
||||
|
||||
default:
|
||||
self = ._other(rawValue)
|
||||
}
|
||||
}
|
||||
|
||||
public var rawValue: String {
|
||||
switch self {
|
||||
case .ERR_BLOCKED: return "ERR_BLOCKED"
|
||||
case .ERR_UNREACHABLE: return "ERR_UNREACHABLE"
|
||||
case .ERR_TAKEN: return "ERR_TAKEN"
|
||||
case .ERR_RESERVED: return "ERR_RESERVED"
|
||||
case .ERR_ACCEPTED: return "ERR_ACCEPTED"
|
||||
case .ERR_BLANK: return "ERR_BLANK"
|
||||
case .ERR_INVALID: return "ERR_INVALID"
|
||||
case .ERR_TOO_LONG: return "ERR_TOO_LONG"
|
||||
case .ERR_TOO_SHORT: return "ERR_TOO_SHORT"
|
||||
case .ERR_INCLUSION: return "ERR_INCLUSION"
|
||||
|
||||
case ._other(let value): return value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct ErrorDetail: Codable {
|
||||
public let username: [ErrorDetailReson]?
|
||||
public let email: [ErrorDetailReson]?
|
||||
public let password: [ErrorDetailReson]?
|
||||
public let agreement: [ErrorDetailReson]?
|
||||
public let locale: [ErrorDetailReson]?
|
||||
public let reason: [ErrorDetailReson]?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case username
|
||||
case email
|
||||
case password
|
||||
case agreement
|
||||
case locale
|
||||
case reason
|
||||
}
|
||||
}
|
||||
|
||||
public struct ErrorDetailReson: Codable {
|
||||
public init(error: String, errorDescription: String?) {
|
||||
self.error = Mastodon.Entity.Error.SignUpError(rawValue: error) ?? ._other(error)
|
||||
self.errorDescription = errorDescription
|
||||
}
|
||||
|
||||
public let error: Mastodon.Entity.Error.SignUpError
|
||||
public let errorDescription: String?
|
||||
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case error
|
||||
case errorDescription = "description"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue