)]}'
{
  "commit": "368a25b2f0c9ccbda5f31d04e6df9f23e294b8b0",
  "tree": "94de84485e6f4fda09dd2934f52c30273429cd7a",
  "parents": [
    "8a7358d1686588689ef59e61e3382115c0cc301f"
  ],
  "author": {
    "name": "Jonathan Amsterdam",
    "email": "jba@google.com",
    "time": "Wed Jun 09 07:17:19 2021 -0400"
  },
  "committer": {
    "name": "Jonathan Amsterdam",
    "email": "jba@google.com",
    "time": "Thu Jun 10 11:50:08 2021 +0000"
  },
  "message": "event: metric-specific builders\n\nThis CL imagines that each kind of metric is its own type, and has its\nown builder.\n\nNotes:\n\n- Metric values are checked by the language. For example, we can enforce that\n  counter values are unsigned integers.\n  That means, however, that we either have to provide metric types for each common\n  value type, or we have to wait for generics to allow a variety of types.\n\n- Builder methods can be tailored to metrics. For example, metric\n  builders have no way to override the metric\u0027s namespace. But it\u0027s\n  not clear that\u0027s the right choice, and I think that\u0027s the only\n  method that we might want to omit.\n\n- In theory, users can define their own metric types. In practice,\n  they\u0027d have to duplicate a lot of our unexported machinery, or we\u0027d\n  have to export it somehow.\n\n- You can\u0027t add common labels to a single Builder and re-use that builder\n  for both metrics and other events.\n\nChange-Id: Ie99cb3b953e1670fb8d6910f9412885e5dcbc219\nReviewed-on: https://go-review.googlesource.com/c/exp/+/326289\nTrust: Jonathan Amsterdam \u003cjba@google.com\u003e\nRun-TryBot: Jonathan Amsterdam \u003cjba@google.com\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Ian Cottrell \u003ciancottrell@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "76c0c9c090e1c8a05b02d05e6622913ec80c39db",
      "old_mode": 33188,
      "old_path": "event/bench/event_test.go",
      "new_id": "637c621737b63d39cc390cbb5acb702ffd2fd394",
      "new_mode": 33188,
      "new_path": "event/bench/event_test.go"
    },
    {
      "type": "modify",
      "old_id": "0d904412f34ea105618817adbe1ec9847466037c",
      "old_mode": 33188,
      "old_path": "event/builder.go",
      "new_id": "5b14267894a27303939cec7fe0f4f28dc9b4aaa6",
      "new_mode": 33188,
      "new_path": "event/builder.go"
    },
    {
      "type": "modify",
      "old_id": "a3658c72397dd4a83c45bc19df4f66d30b40f1ca",
      "old_mode": 33188,
      "old_path": "event/common_test.go",
      "new_id": "6470f1f529bfb2cfc36ae314395b3adebdf335c5",
      "new_mode": 33188,
      "new_path": "event/common_test.go"
    },
    {
      "type": "modify",
      "old_id": "cf6e0cb9784347426ba52d979f3725d2b4389eb6",
      "old_mode": 33188,
      "old_path": "event/event_test.go",
      "new_id": "210f29c3354c87519614275c7f967017485b4a9b",
      "new_mode": 33188,
      "new_path": "event/event_test.go"
    },
    {
      "type": "modify",
      "old_id": "6e30323b6a91968f7747e95dc1ca1f1ff260daef",
      "old_mode": 33188,
      "old_path": "event/metric.go",
      "new_id": "15861b3204e9c2cc35bf6c6c2493e5601b80a018",
      "new_mode": 33188,
      "new_path": "event/metric.go"
    }
  ]
}
