tpctl-objc.m
1 2 #import "tpctl-objc.h" 3 4 @implementation TPCTLObjectiveC 5 6 + (BOOL)catchNSException:(void(^)(void))block error:(NSError**)error { 7 @try { 8 block(); 9 return true; 10 } 11 @catch(NSException* exception) { 12 if(error) { 13 NSMutableDictionary* ui = exception.userInfo ? [exception.userInfo mutableCopy] : [NSMutableDictionary dictionary]; 14 if(exception.reason) { 15 ui[NSLocalizedDescriptionKey] = exception.reason; 16 } 17 *error = [NSError errorWithDomain:exception.name code:0 userInfo:ui]; 18 } 19 return false; 20 } 21 } 22 23 + (NSString* _Nullable)jsonSerialize:(id)something error:(NSError**)error { 24 @try { 25 NSError* localError = nil; 26 NSData* jsonData = [NSJSONSerialization dataWithJSONObject:something options:(NSJSONWritingPrettyPrinted | NSJSONWritingSortedKeys) error:&localError]; 27 if(!jsonData || localError) { 28 if(error) { 29 *error = localError; 30 } 31 return nil; 32 } 33 34 NSString* utf8String = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 35 if(!utf8String) { 36 if(error) { 37 *error = [NSError errorWithDomain:@"text" code:0 userInfo:@{NSLocalizedDescriptionKey: @"JSON data could not be decoded as UTF8"}]; 38 } 39 return nil; 40 } 41 return utf8String; 42 } 43 @catch(NSException* exception) { 44 if(error) { 45 NSMutableDictionary* ui = exception.userInfo ? [exception.userInfo mutableCopy] : [NSMutableDictionary dictionary]; 46 if(exception.reason) { 47 ui[NSLocalizedDescriptionKey] = exception.reason; 48 } 49 *error = [NSError errorWithDomain:exception.name code:0 userInfo:ui]; 50 } 51 return nil; 52 } 53 } 54 55 @end