session-ios/SessionMessagingKit/Utilities/Promise+Utilities.swift
Morgan Pretty c90f346d6a Further SOGS V4 integration work
Added in the v4 onion requests logic
Added in the new pin/unpin APIs
Split up additional legacy methods to try and simplify the refactoring
Added a number of TODOs around usage of legacy request methods
2022-02-14 14:07:45 +11:00

26 lines
945 B
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
import PromiseKit
import SessionSnodeKit
extension Promise where T == Data {
func decoded<R: Decodable>(as type: R.Type, on queue: DispatchQueue? = nil, error: Error? = nil) -> Promise<R> {
self.map(on: queue) { data -> R in
try data.decoded(as: type, customError: error)
}
}
}
extension Promise where T == (OnionRequestAPI.ResponseInfo, Data?) {
func decoded<R: Decodable>(as type: R.Type, on queue: DispatchQueue? = nil, error: Error? = nil) -> Promise<(OnionRequestAPI.ResponseInfo, R)> {
self.map(on: queue) { responseInfo, maybeData -> (OnionRequestAPI.ResponseInfo, R) in
guard let data: Data = maybeData else {
throw OpenGroupAPIV2.Error.parsingFailed
}
return (responseInfo, try data.decoded(as: type, customError: error))
}
}
}