  A value type struct, it conforms to the Mappable protocol so that it can be instantiated with JSON
 */
 public struct ViewModel: Mappable {
+
+  public enum Key: String {
+    case Index
+    case Title
+    case Subtitle
+    case Image
+    case Type
+    case Kind
+    case Action
+    case Meta
+    case Relations
+    case Size
+    case Width
+    case Height
+
+    var string: String {
+      return rawValue.lowercaseString
+    }
+  }
+
   /// The index of the ViewModel when appearing in a list, should be computed and continuously updated by the data source
   public var index = 0
   /// The main representation of the ViewModel

    }

    size = CGSize(
      width:  ((map["size"] as? JSONDictionary)?["width"] as? Int) ?? 0,
      height: ((map["size"] as? JSONDictionary)?["height"] as? Int) ?? 0
    )
  }


  /// A key-value dictionary for related view models
  public var relations = [String : [ViewModel]]()

  public var dictionary: JSONDictionary {
    return [
      Key.Index.string : index,
      Key.Title.string : title,
      Key.Subtitle.string : subtitle,
      Key.Image.string : image,
      Key.Kind.string : kind,
      //Key.Action.string : action
    ]
  }

  // MARK: - Initialization

  /**
