41 lines
1.0 KiB
Swift
41 lines
1.0 KiB
Swift
import Foundation
|
|||
|
|
|
||
|
|
extension Dictionary where Key == String, Value == Any {
|
||
|
|
func int(_ key: String) -> Int? {
|
||
|
|
return (self[key] as? NSNumber)?.intValue
|
||
|
|
}
|
||
|
|
|
||
|
|
func double(_ key: String) -> Double? {
|
||
|
|
return (self[key] as? NSNumber)?.doubleValue
|
||
|
|
}
|
||
|
|
|
||
|
|
func string(_ key: String) -> String? {
|
||
|
|
return self[key] as? String
|
||
|
|
}
|
||
|
|
|
||
|
|
func bool(_ key: String) -> Bool {
|
||
|
|
return (self[key] as? NSNumber)?.boolValue ?? false
|
||
|
|
}
|
||
|
|
|
||
|
|
func dict(_ key: String) -> [String: Any]? {
|
||
|
|
return self[key] as? [String: Any]
|
||
|
|
}
|
||
|
|
|
||
|
|
func ms(_ key: String) throws -> Int? {
|
||
|
|
guard let v = int(key) else {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
if v < 0 || v > 600_000 {
|
||
|
|
throw ToolError("\(key) must be between 0 and 600000 ms")
|
||
|
|
}
|
||
|
|
return v
|
||
|
|
}
|
||
|
|
|
||
|
|
func require<T>(_ key: String, _ get: (String) -> T?) throws -> T {
|
||
|
|
guard let v = get(key) else {
|
||
|
|
throw ToolError("missing or malformed argument: \(key)")
|
||
|
|
}
|
||
|
|
return v
|
||
|
|
}
|
||
|
|
}
|