|  |  |  | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import Foundation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public extension Dictionary { | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     var prettifiedDescription: String { | 
					
						
							|  |  |  |         return "[ " + map { key, value in | 
					
						
							|  |  |  |             let keyDescription = String(describing: key) | 
					
						
							|  |  |  |             let valueDescription = String(describing: value) | 
					
						
							|  |  |  |             let maxLength = 20 | 
					
						
							|  |  |  |             let truncatedValueDescription = valueDescription.count > maxLength ? valueDescription.prefix(maxLength) + "..." : valueDescription | 
					
						
							|  |  |  |             return keyDescription + " : " + truncatedValueDescription | 
					
						
							|  |  |  |         }.joined(separator: ", ") + " ]" | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     func asArray() -> [(key: Key, value: Value)] { | 
					
						
							|  |  |  |         return Array(self) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public extension Dictionary.Values { | 
					
						
							|  |  |  |     func asArray() -> [Value] { | 
					
						
							|  |  |  |         return Array(self) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // MARK: - Functional Convenience | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public extension Dictionary { | 
					
						
							|  |  |  |     public subscript(_ key: Key?) -> Value? { | 
					
						
							|  |  |  |         guard let key: Key = key else { return nil } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return self[key] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     func setting(_ key: Key?, _ value: Value?) -> [Key: Value] { | 
					
						
							|  |  |  |         guard let key: Key = key else { return self } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         var updatedDictionary: [Key: Value] = self | 
					
						
							|  |  |  |         updatedDictionary[key] = value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return updatedDictionary | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     func updated(with other: [Key: Value]) -> [Key: Value] { | 
					
						
							|  |  |  |         var updatedDictionary: [Key: Value] = self | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         other.forEach { key, value in | 
					
						
							|  |  |  |             updatedDictionary[key] = value | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return updatedDictionary | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     func removingValue(forKey key: Key?) -> [Key: Value] { | 
					
						
							|  |  |  |         guard let key: Key = key else { return self } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         var updatedDictionary: [Key: Value] = self | 
					
						
							|  |  |  |         updatedDictionary.removeValue(forKey: key) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return updatedDictionary | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |