     }
     
     private struct GI: Codable {
-        public let aliases: [String: AliasMetaData]
+        public let aliases: [IndexAlias]
         public let mappings: Properties
         public let settings: Settings
         
         public init(from decoder: Decoder) throws {
             
             let container = try decoder.container(keyedBy: CodingKeys.self)
-            self.aliases = try container.decode([String: AliasMetaData].self, forKey: .aliases)
             self.settings = try container.decode(Settings.self, forKey: .settings)
+            let dic = try container.decode([String: AliasMetaData].self, forKey: .aliases)
+            self.aliases = dic.map { IndexAlias(name: $0, metaData: $1) }
+            
             do {
                 self.mappings = try container.decode(Properties.self, forKey: .mappings)
             } catch {

    public let uuid: String
    public let providedName: String
    public let version: IndexVersion
    
    init(creationDate: String, numberOfShards: String, numberOfReplicas: String, uuid: String, providedName: String, version: IndexVersion) {
        self.creationDate = creationDate
        self.numberOfShards = numberOfShards
        self.numberOfReplicas = numberOfReplicas
        self.uuid = uuid
        self.providedName = providedName
        self.version = version
    }
    
    enum CodingKeys: String, CodingKey {


public struct GetIndexResponse: Codable {
    
    public let aliases: [IndexAlias]
    public let mappings: [String: MappingMetaData]
    public let settings: IndexSettings
    
    init(aliases: [IndexAlias]=[], mappings: [String: MappingMetaData]=[:], settings: IndexSettings) {
        self.aliases = aliases
        self.mappings = mappings
        self.settings = settings
