     }
     
     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 type: String?
    public let fields: Fields?
    
    public struct Fields: Codable {
        public let keyword: Keyword

    
    public let indexRouting: String?
    public let searchRouting: String?
    public let routing: String?
    public let filter: CodableValue?
    
    enum CodingKeys: String, CodingKey {
        case indexRouting = "index_routing"
        case searchRouting = "search_routing"
        case routing
        case filter
    }
}

