)]}'
{
  "commit": "152bfad24cc836064b449a756ca8482a76cecdf9",
  "tree": "7bbcba89d90f72be457a32bba25926a202dad348",
  "parents": [
    "6b0190f746976a2e3b26ed529a9d487ae2587868"
  ],
  "author": {
    "name": "msta",
    "email": "msta@google.com",
    "time": "Mon Aug 10 14:13:54 2026 +1000"
  },
  "committer": {
    "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Tue Aug 11 19:20:07 2026 -0700"
  },
  "message": "Implement a Result\u003cT\u003e type.\n\nOutput parameters are an antipattern that should be avoided in C++.\n\nThey have a minor performance overhead from the inability to use RVO,\nbut more importantly, they\u0027re extremely unergonomic to use. Unless\nyou\u0027re specifically passing a potentially non-empty object by reference,\nyou should generally avoid using them.\n\nhttps://www.dominikgrabiec.com/posts/2022/02/20/cpp_antipattern_passing_result_array_in.html\n\nGoogle3 has had absl::StatusOr and RETURN_IF_ERROR / ASSIGN_OR_RETURN\nsince I first started in 2018. With the advent of C++23, we now have\nstd::expected.\n\nThese are equivalent to rust\u0027s \"?\" operator. They significantly improve\nreadability and make it much harder to write incorrect code (eg.\nignoring the error value).\n\nSee go/totw/121 if you\u0027re a googler for more details\n\nChange-Id: If32e4c953f9cdfe4c3764eb01970d2596a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/25140\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e27506628a7e3dd2128414d103b22e9e8a3facdd",
      "old_mode": 33188,
      "old_path": "src/gn/config_values_generator.cc",
      "new_id": "f97b54f4f0240a5f2e19c26f2187129a401a684f",
      "new_mode": 33188,
      "new_path": "src/gn/config_values_generator.cc"
    },
    {
      "type": "modify",
      "old_id": "098ea95e1d961abf05ca038d87df26ae1e6d4d88",
      "old_mode": 33188,
      "old_path": "src/gn/err.h",
      "new_id": "626ba30553175a35d0af8a178e22eb3eeb755b22",
      "new_mode": 33188,
      "new_path": "src/gn/err.h"
    },
    {
      "type": "modify",
      "old_id": "e2aa11a33937df524eb2b63fd6acb660f037ccbd",
      "old_mode": 33188,
      "old_path": "src/gn/value.cc",
      "new_id": "db184eed275cefc1eac007fd822ed173ba3d8893",
      "new_mode": 33188,
      "new_path": "src/gn/value.cc"
    },
    {
      "type": "modify",
      "old_id": "ec4cb5abcc07d1dc8fcefbe4962b6749e938b774",
      "old_mode": 33188,
      "old_path": "src/gn/value.h",
      "new_id": "dab3a8e391ca01edf9391126acd9c3fe8122673a",
      "new_mode": 33188,
      "new_path": "src/gn/value.h"
    },
    {
      "type": "modify",
      "old_id": "3984d226aeeef0634a5141a164f289a7681be72a",
      "old_mode": 33188,
      "old_path": "src/gn/value_extractors.cc",
      "new_id": "255970d497bd8eed10e81045225ce612a39c9c3e",
      "new_mode": 33188,
      "new_path": "src/gn/value_extractors.cc"
    },
    {
      "type": "modify",
      "old_id": "9cc9e0086d3316d5f87a07bf0fd749706430c863",
      "old_mode": 33188,
      "old_path": "src/gn/value_extractors.h",
      "new_id": "2d4a4398351408d55326df6bba5aa0ab337792f0",
      "new_mode": 33188,
      "new_path": "src/gn/value_extractors.h"
    }
  ]
}
