Files
yingmeng-ios-switf/yinmeng-ios/HttpRequest/YMLastNeverResult.swift

70 lines
1.8 KiB
Swift
Raw Normal View History

2024-02-21 21:30:13 +08:00
//
// YMLastNeverResult.swift
// yinmeng-ios
//
// Created by MaiMang on 2024/2/2.
//
import Foundation
public typealias LastNeverCallback = ((_ lastResult: LastNeverResult) -> Void)
/// Containing the data source and whether auto last network request.
public final class LastNeverResult {
public var result: Result<Moya.Response, MoyaError>
/// Any
/// Solve the problem of repeated parsing, if a plugin has parsed the data into `Any`
public var mapResult: Result<Any, MoyaError>?
///
public var againRequest: Bool = false
private let plugins: APIPlugins
public init(result: Result<Moya.Response, MoyaError>, plugins: APIPlugins) {
self.result = result
self.plugins = plugins
}
}
extension LastNeverResult {
func mapResult(success: APISuccess? = nil, failure: APIFailure? = nil, progress: ProgressBlock? = nil) {
if let mapResult = mapResult {
switch mapResult {
case let .success(json):
success?(json)
case let .failure(error):
failure?(error)
}
return
}
switch result {
case let .success(response):
do {
let json = try YMRequestX.toJSON(with: response)
self.mapResult = .success(json)
success?(json)
progress?(ProgressResponse(response: response))
} catch MoyaError.statusCode(let response) {
let error = MoyaError.statusCode(response)
self.mapResult = .failure(error)
failure?(error)
} catch MoyaError.jsonMapping(let response) {
let error = MoyaError.jsonMapping(response)
self.mapResult = .failure(error)
failure?(error)
} catch {
if let error = error as? MoyaError {
self.mapResult = .failure(error)
}
failure?(error)
}
case let .failure(error):
self.mapResult = .failure(error)
failure?(error)
}
}
}