Slide 34
Slide 34 text
Deal with Github API
import Thrush
import QWFuture
struct CurlContext {
let writeCallback: ([Byte]) -> ()
}
return Promise { resolve, reject in
let future = QWFuture(loop: self.loop) { (completion: (() throws -> Data) -> ()) in
let handle = curl_easy_init()
curlHelperSetOptString(handle, CURLOPT_URL, UnsafeMutablePointer(self.uri.buffer))
curlHelperSetOptBool(handle, CURLOPT_HTTPGET, CURL_TRUE)
..................
var data = Data()
let writeCallback = { (bytes: [Byte]) in
data.append(contentsOf: bytes)
}
curlHelperSetOptWriteFunc(handle, context) { (buf, size, nMemb, privateData) -> Int in
let ctx = UnsafePointer(privateData)
let segsize = size * nMemb
var bytes = [Byte]()
for i in stride(from: 0, to: segsize, by: 1) {
bytes.append(Byte(bitPattern: buf![i]))
}
ctx?.pointee?.writeCallback(bytes)
return segsize
}
curl_easy_perform(handle)
curl_easy_cleanup(handle)
completion {
data
}
}
future.onSuccess {
resolve($0)
}
future.onFailure {
reject($0)
}