using System; using System.Collections.Generic; using System.Linq; using Bit.Core.Models.Domain; using Foundation; using Newtonsoft.Json; namespace Bit.iOS.Core.Utilities { public static class DictionaryExtensions { public static NSDictionary ToNSDictionary(this Dictionary dict) { return dict.ToNSDictionary(k => new NSString(k), v => (NSObject)new NSString(JsonConvert.SerializeObject(v))); } public static NSDictionary ToNSDictionary(this Dictionary dict, Func keyConverter, Func valueConverter) where KTo : NSObject where VTo : NSObject { var NSValues = dict.Values.Select(x => valueConverter(x)).ToArray(); var NSKeys = dict.Keys.Select(x => keyConverter(x)).ToArray(); return NSDictionary.FromObjectsAndKeys(NSValues, NSKeys, NSKeys.Count()); } public static Dictionary ToDictionary(this NSDictionary nsDict) { return nsDict.ToDictionary(v => v?.ToString() as object); } public static Dictionary ToDictionary(this NSDictionary nsDict, Func valueTransformer) { return nsDict.ToDictionary(k => k.ToString(), v => valueTransformer(v)); } public static Dictionary ToDictionary(this NSDictionary nsDict, Func keyConverter, Func valueConverter) where KFrom : NSObject where VFrom : NSObject { var keys = nsDict.Keys.Select(k => keyConverter(k)).ToArray(); var values = nsDict.Values.Select(v => valueConverter(v)).ToArray(); return keys.Zip(values, (k, v) => new { Key = k, Value = v }) .ToDictionary(x => x.Key, x => x.Value); } } }