)]}'
{
  "commit": "c51aeb1f0efe5a161dad589ff3060708a88b89fa",
  "tree": "28ec3184c723c91b6f43d0b32f4db97dd739a5b6",
  "parents": [
    "60292f4293e00f1d4b4e5566c5f601d19114f51e"
  ],
  "author": {
    "name": "Lukasz Anforowicz",
    "email": "lukasza@google.com",
    "time": "Mon Nov 07 10:56:18 2022 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Mon Nov 07 10:56:55 2022 -0800"
  },
  "message": "Explicit names for anonymous parameters: `fn foo(_: f64, _: f64)`.\n\nIn theory, the names could be omitted in *some* C++ translations (e.g.\n`void foo(double, double)`), but they are required in other scenarios:\n\n1. Forwarding an argument to a Rust function with a different name\n   (e.g. `#[export_name \u003d ...]` attribute and/or Rust-ABI functions).\n   `return ::__crubit_internal::export_name(need_param_name_here)`.\n\n2. Irrefutable, destructuring pattern matching - e.g.:\n   `fn foo((x, y): (i32, i32)) {}`\n   (this CL doesn\u0027t yet provide test coverage for this scenario,\n   because types that support destructuring are not yet supported).\n\nPiperOrigin-RevId: 486708734\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5f8fb685ae0860e7e0f7242ebae96d8aa8e48bef",
      "old_mode": 33188,
      "old_path": "cc_bindings_from_rs/bindings.rs",
      "new_id": "73d623f37a70d91acca3dc353001267cea50a32d",
      "new_mode": 33188,
      "new_path": "cc_bindings_from_rs/bindings.rs"
    },
    {
      "type": "modify",
      "old_id": "53d618a6de3c0dcd2304d3cd584e37833d04511f",
      "old_mode": 33188,
      "old_path": "common/code_gen_utils.rs",
      "new_id": "e441062dfbce06ef271d6fe6c26c1f53ed755a2d",
      "new_mode": 33188,
      "new_path": "common/code_gen_utils.rs"
    }
  ]
}
