added iOS source code
[wl-app.git] / iOS / Pods / OAuthSwift / Sources / Dictionary+OAuthSwift.swift
1 //
2 //  Dictionary+OAuthSwift.swift
3 //  OAuthSwift
4 //
5 //  Created by Dongri Jin on 6/21/14.
6 //  Copyright (c) 2014 Dongri Jin. All rights reserved.
7 //
8
9 import Foundation
10
11 extension Dictionary {
12
13     func join(_ other: Dictionary) -> Dictionary {
14         var joinedDictionary = Dictionary()
15
16         for (key, value) in self {
17             joinedDictionary.updateValue(value, forKey: key)
18         }
19
20         for (key, value) in other {
21             joinedDictionary.updateValue(value, forKey: key)
22         }
23
24         return joinedDictionary
25     }
26
27     var urlEncodedQuery: String {
28         var parts = [String]()
29
30         for (key, value) in self {
31             let keyString = "\(key)".urlEncoded
32             let valueString = "\(value)".urlEncoded
33             let query = "\(keyString)=\(valueString)"
34             parts.append(query)
35         }
36
37         return parts.joined(separator: "&")
38     }
39
40     mutating func merge<K, V>(_ dictionaries: Dictionary<K, V>...) {
41         for dict in dictionaries {
42             for (key, value) in dict {
43                 if let v = value as? Value, let k = key as? Key {
44                     self.updateValue(v, forKey: k)
45                 }
46             }
47         }
48     }
49
50     func map<K: Hashable, V> (_ transform: (Key, Value) -> (K, V)) -> [K: V] {
51         var results: [K: V] = [:]
52         for k in self.keys {
53             if let value = self[ k ] {
54                 let (u, w) = transform(k, value)
55                 results.updateValue(w, forKey: u)
56             }
57         }
58         return results
59     }
60 }
61
62 extension Dictionary {
63     @available(swift, introduced: 3.2, obsoleted: 4.0)
64     public func filter(_ isIncluded: (Key, Value) throws -> Bool) rethrows -> [Key: Value] {
65         var resultDictionary = [Key: Value](minimumCapacity: count)
66         for (key, value) in self {
67             if try isIncluded(key, value) {
68                 resultDictionary[key] = value
69             }
70         }
71         return resultDictionary
72     }
73 }
74
75 func +=<K, V> (left: inout [K: V], right: [K: V]) { left.merge(right) }
76 func +<K, V> (left: [K: V], right: [K: V]) -> [K: V] { return left.join(right) }
77 func +=<K, V> (left: inout [K: V]?, right: [K: V]) {
78     if left != nil { left?.merge(right) } else { left = right }
79 }