)]}'
{
  "commit": "a8e3fbedc827f992657f5670212e854f62ec12ad",
  "tree": "c1efa114f89d64346d9d21f39b30d2f886176808",
  "parents": [
    "2e4450ff432daef524cb3557fca68a3b7b5c7823"
  ],
  "author": {
    "name": "Daniel P. Berrange",
    "email": "berrange@redhat.com",
    "time": "Wed May 13 17:14:08 2015 +0100"
  },
  "committer": {
    "name": "Andreas Färber",
    "email": "afaerber@suse.de",
    "time": "Fri Jun 19 18:42:18 2015 +0200"
  },
  "message": "qom: Add an object_property_add_enum() helper function\n\nA QOM property can be parsed as enum using the visit_type_enum()\nhelper function, but this forces callers to use the more complex\ngeneric object_property_add() method when registering it. It\nalso requires that users of that object have access to the\nstring map when they want to read the property value.\n\nThis patch introduces a specialized object_property_add_enum()\nmethod which simplifies the use of enum properties, so the\nsetters/getters directly get passed the int value.\n\n  typedef enum {\n     MYDEV_TYPE_FROG,\n     MYDEV_TYPE_ALLIGATOR,\n     MYDEV_TYPE_PLATYPUS,\n\n     MYDEV_TYPE_LAST\n  } MyDevType;\n\nThen provide a table of enum \u003c-\u003e string mappings\n\n  static const char *const mydevtypemap[MYDEV_TYPE_LAST + 1] \u003d {\n     [MYDEV_TYPE_FROG] \u003d \"frog\",\n     [MYDEV_TYPE_ALLIGATOR] \u003d \"alligator\",\n     [MYDEV_TYPE_PLATYPUS] \u003d \"platypus\",\n     [MYDEV_TYPE_LAST] \u003d NULL,\n  };\n\nAssuming an object struct of\n\n   typedef struct {\n      Object parent_obj;\n      MyDevType devtype;\n      ...other fields...\n   } MyDev;\n\nThe property can then be registered as follows:\n\n   static int mydev_prop_get_devtype(Object *obj,\n                                     Error **errp G_GNUC_UNUSED)\n   {\n       MyDev *dev \u003d MYDEV(obj);\n\n       return dev-\u003edevtype;\n   }\n\n   static void mydev_prop_set_devtype(Object *obj,\n                                      int value,\n                                      Error **errp G_GNUC_UNUSED)\n   {\n       MyDev *dev \u003d MYDEV(obj);\n\n       dev-\u003edevtype \u003d value;\n   }\n\n   object_property_add_enum(obj, \"devtype\",\n                            mydevtypemap, \"MyDevType\",\n                            mydev_prop_get_devtype,\n                            mydev_prop_set_devtype,\n                            NULL);\n\nNote there is no need to check the range of \u0027value\u0027 in\nthe setter, because the string-\u003eenum conversion code will\nhave already done that and reported an error as required.\n\nSigned-off-by: Daniel P. Berrange \u003cberrange@redhat.com\u003e\nReviewed-by: Eric Blake \u003ceblake@redhat.com\u003e\nSigned-off-by: Andreas Färber \u003cafaerber@suse.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "701b4c57e770cc75f2755ee448c6eb1baa7842da",
      "old_mode": 33188,
      "old_path": "include/qom/object.h",
      "new_id": "a8a53049cbf379168408194285f30bf53b809506",
      "new_mode": 33188,
      "new_path": "include/qom/object.h"
    },
    {
      "type": "modify",
      "old_id": "523307d839e0ab77dc89c77e447f8daf1129a1f2",
      "old_mode": 33188,
      "old_path": "qom/object.c",
      "new_id": "8f0d8a7b13f04b3c4456d402fcfa7fb029b2df4c",
      "new_mode": 33188,
      "new_path": "qom/object.c"
    },
    {
      "type": "modify",
      "old_id": "e82532e1f253417e712052e7c0ef7e518a9c4bcc",
      "old_mode": 33188,
      "old_path": "tests/check-qom-proplist.c",
      "new_id": "ae4cd4cde6802053451a2b0c02fa07ef3b6358dc",
      "new_mode": 33188,
      "new_path": "tests/check-qom-proplist.c"
    }
  ]
}
