TNLCLI/TNLCLIUtils.m (46 lines of code) (raw):
//
// TNLCLIUtils.m
// tnlcli
//
// Created on 9/17/19.
// Copyright © 2020 Twitter. All rights reserved.
//
#import "TNLCLIUtils.h"
BOOL TNLCLIParseColonSeparatedKeyValuePair(NSString *str, NSString ** keyOut, NSString ** valueOut)
{
NSString *key, *value;
const NSUInteger indexOfColon = [str rangeOfString:@":"].location;
if (indexOfColon != NSNotFound) {
@autoreleasepool {
key = [[str substringToIndex:indexOfColon] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
value = [[str substringFromIndex:indexOfColon+1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
}
if (keyOut) {
*keyOut = key;
}
if (valueOut) {
*valueOut = value;
}
return (key && value);
}
NSNumber *TNLCLINumberValueFromString(NSString *value)
{
NSScanner *scanner = [NSScanner scannerWithString:value];
double num;
if ([scanner scanDouble:&num] && scanner.atEnd) {
return @(num);
}
return nil;
}
NSNumber *TNLCLIBoolNumberValueFromString(NSString *value)
{
value = value.lowercaseString;
static NSSet<NSString *> *sTrueStrings;
static NSSet<NSString *> *sFalseStrings;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sTrueStrings = [NSSet setWithObjects:@"true", @"yes", @"1", nil];
sFalseStrings = [NSSet setWithObjects:@"false", @"no", @"0", nil];
});
if ([sTrueStrings containsObject:value]) {
return @YES;
}
if ([sFalseStrings containsObject:value]) {
return @NO;
}
return nil;
}