// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import Foundation import PromiseKit import SessionSnodeKit import SessionUtilitiesKit extension Promise where T == Data { func decoded(as type: R.Type, on queue: DispatchQueue? = nil, using dependencies: Dependencies = Dependencies()) -> Promise { self.map(on: queue) { data -> R in try data.decoded(as: type, using: dependencies) } } } extension Promise where T == (OnionRequestResponseInfoType, Data?) { func decoded(as type: R.Type, on queue: DispatchQueue? = nil, using dependencies: Dependencies = Dependencies()) -> Promise<(OnionRequestResponseInfoType, R)> { self.map(on: queue) { responseInfo, maybeData -> (OnionRequestResponseInfoType, R) in guard let data: Data = maybeData else { throw HTTP.Error.parsingFailed } do { return (responseInfo, try data.decoded(as: type, using: dependencies)) } catch { throw HTTP.Error.parsingFailed } } } }