)]}'
{
  "commit": "cfc425b6fe71c5fe6a112293313516ca20210a4a",
  "tree": "ccb219527037e53039df9a0de6351811492c33f9",
  "parents": [
    "ffa8ee0a32999e9ef8cbcd0a89262f44f165a153"
  ],
  "author": {
    "name": "Taylor Cramer",
    "email": "cramertj@google.com",
    "time": "Wed Aug 12 09:52:56 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Aug 12 12:48:53 2026 -0700"
  },
  "message": "Change rs_bindings_from_cc to use new_string (layout-compatible) instead of string_wrapper (bridging) when generating bindings for C++ std::string, controlled by a new feature flag `layout_compatible_string`.\n\nWhen the flag is enabled, this ensures that in contexts requiring layout compatibility (pointers, references, template arguments, and struct fields), `std::string` is mapped to `new_string` instead of the bridge-based `string_wrapper` (or being erased in case of fields).\n\nRefactor generate_function_thunk_impl in generate_function_thunk.rs to use pre-calculated RsTypeKinds instead of recalculating them. This ensures C++ thunks and Rust FFI declarations agree on the type layout, preventing segfaults caused by mismatch.\n\nPropagate the `use_layout_compatible_string` option (derived from target features) through the bindings generator:\n- In `missing_feature_descriptions` to avoid false positive \"unsupported\" errors for template instantiations containing `std::string` when the flag is enabled.\n- In `rs_type_kind` query to use target features of the current target by default.\n- In function pointer type resolution in `rs_type_kind.rs`.\n\nUpdate `test_helpers` in `support/cc_std_impl/test/string` to enable `layout_compatible_string` via `aspect_hints` and verify it compiles and passes tests.\n\nPiperOrigin-RevId: 963505149\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "662714ed2a416c05ba653bc24ff2ffcf14b14b50",
      "old_mode": 33188,
      "old_path": "common/crubit_feature.rs",
      "new_id": "af59eb791b164cfe09e6f37899f9838904043c6c",
      "new_mode": 33188,
      "new_path": "common/crubit_feature.rs"
    },
    {
      "type": "modify",
      "old_id": "ff9fd21f992612d39e62570687278cc25d145d6f",
      "old_mode": 33188,
      "old_path": "features/BUILD",
      "new_id": "09141379e7b58c613dd37ea75464655b98ba1959",
      "new_mode": 33188,
      "new_path": "features/BUILD"
    },
    {
      "type": "modify",
      "old_id": "dd89471c6c12832e8eb08cd4b3c578ef779ac2d6",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/database/db.rs",
      "new_id": "706fec2f36121b15f42683323f543c16593d8792",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/database/db.rs"
    },
    {
      "type": "modify",
      "old_id": "a43e0ca8cf20ed2e12a61a9691920388896202ff",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/database/rs_snippet.rs",
      "new_id": "677419340dabb919ff5adb3a9926e24886777631",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/database/rs_snippet.rs"
    },
    {
      "type": "modify",
      "old_id": "4f4016a77571485587a997b3687499aefaa8a109",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/generate_bindings_test.rs",
      "new_id": "c7209183f03e2bb27b4e3afee04c8bb3aff8520d",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/generate_bindings_test.rs"
    },
    {
      "type": "modify",
      "old_id": "fe587adda02d9c698e083d423469b66453c95903",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/generate_function.rs",
      "new_id": "7249d48b9cf4e600d54213fffa45254e3438eb3c",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/generate_function.rs"
    },
    {
      "type": "modify",
      "old_id": "44094469321dda3a8069a6a120e62585e97ff5a6",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/generate_function_thunk.rs",
      "new_id": "0e491486b3b352a561b313778e52ca6e6fa6a246",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/generate_function_thunk.rs"
    },
    {
      "type": "modify",
      "old_id": "cf5eaa18d442dc1b99633bca62e46ac738bc8122",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/generate_struct_and_union.rs",
      "new_id": "fcb587567b3644c54fef6ad4634b79db4af0a414",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/generate_struct_and_union.rs"
    },
    {
      "type": "modify",
      "old_id": "5d58f31b9173a54b737d3ef14ca3bf79c328181c",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/generate_struct_and_union_test.rs",
      "new_id": "53bd922c12bcf5caea3b8e648d1c0aa645e0728d",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/generate_struct_and_union_test.rs"
    },
    {
      "type": "modify",
      "old_id": "b96a67536c73a08c66dffd16b573f41e083e6c1c",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/lib.rs",
      "new_id": "e14dca73ced357e050c4dc984124288dcc353316",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/lib.rs"
    },
    {
      "type": "modify",
      "old_id": "c9ca2d2ef774821ff712e850bbd25f5caee9ce63",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/generate_bindings/rs_type_kind.rs",
      "new_id": "1ef0d73a0407bd158152c27e7ca2b3aab1fa2077",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/generate_bindings/rs_type_kind.rs"
    },
    {
      "type": "modify",
      "old_id": "d17ac779f72c8cbcfc48582d8158465520504643",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/importers/cxx_record.cc",
      "new_id": "6daa7930428f28f8fac9819c2e7312dcfb7d2114",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/importers/cxx_record.cc"
    },
    {
      "type": "modify",
      "old_id": "6968b2837f3767e4708955a8e28bdb4b9af47591",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/test/absl_flat_hash_map/isolated_rs_api.rs",
      "new_id": "1b1a48ca27140f15c05d3710fc76a38308d7bb69",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/test/absl_flat_hash_map/isolated_rs_api.rs"
    },
    {
      "type": "modify",
      "old_id": "cccb1a33309e02388c23487a976b5c55f33a8c40",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/test/golden/c_abi_compatible_type_rs_api_impl.cc",
      "new_id": "a7a14572cb5df2e8c5df6429e97134b24b4ccda9",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/test/golden/c_abi_compatible_type_rs_api_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "964e1b10c8161df1f031ced3a4653510ca127695",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/test/golden/composable_bridging_rs_api.rs",
      "new_id": "a48c325ee668fb036fbb087ebba93d928555d839",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/test/golden/composable_bridging_rs_api.rs"
    },
    {
      "type": "modify",
      "old_id": "09f0004fdf7ae722dc22e42dd3b362122957b8d9",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/test/golden/no_unique_address_rs_api.rs",
      "new_id": "adca54a135f7abf8166f057680c1f10d31936ba0",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/test/golden/no_unique_address_rs_api.rs"
    },
    {
      "type": "modify",
      "old_id": "5dc036bf4b97b87b4c2f56226d2a0f625e64cc08",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/test/golden/no_unique_address_rs_api_impl.cc",
      "new_id": "a2804c2b2b0ae487806893dc9f1f3b6564ee55a0",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/test/golden/no_unique_address_rs_api_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "47dde943315650801bbf62714a681acdb0c04689",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/test/golden/nontrivial_type_rs_api.rs",
      "new_id": "ad3d2edcc407c97c80aaa30cb4c6f4a8f500249e",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/test/golden/nontrivial_type_rs_api.rs"
    },
    {
      "type": "modify",
      "old_id": "7f9219f9551137948a341c23d944f61ff866e83c",
      "old_mode": 33188,
      "old_path": "rs_bindings_from_cc/test/golden/nontrivial_type_rs_api_impl.cc",
      "new_id": "ef9e07261c4692202080278b048c7761c55ef3ec",
      "new_mode": 33188,
      "new_path": "rs_bindings_from_cc/test/golden/nontrivial_type_rs_api_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "68d5867f66edc17b7618a8d1d78f7e9ad11ded64",
      "old_mode": 33188,
      "old_path": "support/cc_std_impl/string.rs",
      "new_id": "c2dec4fd037aca4dfe74098a3b62b6a588a34a23",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/string.rs"
    },
    {
      "type": "modify",
      "old_id": "90635f1fd1f869822ddd98062c5b9c33ac693155",
      "old_mode": 33188,
      "old_path": "support/cc_std_impl/test/string/BUILD",
      "new_id": "ce12f33a87993f1d16a4dad55f2201ae4fd87fb2",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/test/string/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "448250fb004058942be7bd90b0c97b17d4a9829c",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/test/string/layout_compatible_string_mock.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "072fc47b8e8edc37b6903bb6d72cc4fc23277ca5",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/test/string/layout_compatible_string_mock_namespaces.json"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "848cbc449871d04dcfef911efebe5a2e7c009e5c",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/test/string/layout_compatible_string_mock_rs_api.rs"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "78888f5aeeca1a7ee7b11d03442accc494b5cbee",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/test/string/layout_compatible_string_mock_rs_api_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "7a9084611b5a7cbcaa55154ec8284ee8aa74c69f",
      "old_mode": 33188,
      "old_path": "support/cc_std_impl/test/string/test_helpers.h",
      "new_id": "98f813a792b70ed4841b47d199eca8a0ae9b0484",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/test/string/test_helpers.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bd01500b834a48d3528979ee72dbf472e35396fa",
      "new_mode": 33188,
      "new_path": "support/cc_std_impl/test/string/test_layout_compatible.rs"
    }
  ]
}
