Files
Jot/Carthage/Checkouts/PromiseKit/Extensions/Social/Sources/SLRequest+AnyPromise.m
James Griffin be7b6b5881 Add PromiseKit dependency
- Added PromiseKit dependency
2018-11-15 22:12:39 -04:00

52 lines
1.7 KiB
Objective-C

//
// Created by merowing on 09/05/2014.
//
//
//
#import <PromiseKit/PromiseKit.h>
#import "SLRequest+AnyPromise.h"
#if COCOAPODS
#import "NSURLSession+AnyPromise.h"
#else
#import <PMKFoundation/NSURLSession+AnyPromise.h>
#endif
@implementation SLRequest (PromiseKit)
- (AnyPromise *)promise {
return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) {
[self performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
assert(![NSThread isMainThread]);
if (error)
return resolve(error);
NSInteger const statusCode = urlResponse.statusCode;
if (statusCode < 200 || statusCode >= 300) {
id userInfo = [NSMutableDictionary new];
userInfo[PMKURLErrorFailingURLResponseKey] = urlResponse;
userInfo[NSLocalizedDescriptionKey] = [NSHTTPURLResponse localizedStringForStatusCode:statusCode];
if (responseData) {
id str = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
userInfo[PMKURLErrorFailingStringKey] = str;
}
resolve([NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorBadServerResponse userInfo:userInfo]);
}
else if (PMKHTTPURLResponseIsJSON(urlResponse)) {
id err = nil;
id json = [NSJSONSerialization JSONObjectWithData:responseData options:PMKJSONDeserializationOptions error:&err];
resolve(err ?: PMKManifold(json, urlResponse, responseData));
} else {
resolve(PMKManifold(responseData, urlResponse, responseData));
}
}];
}];
}
@end