Files
yingmeng-ios-switf/yinmeng-ios/HttpRequest/YMLastNeverResult.swift
2024-02-21 21:30:13 +08:00

70 lines
1.8 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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)
}
}
}