From dca25d9ea6c57ae54f40d3b128db1f361ed2625c Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 28 Nov 2025 17:40:01 -0800 Subject: [PATCH] Cleanup ml_dsa_parameters bindings to use enum types PiperOrigin-RevId: 837955524 --- .../generate_bindings/database/rs_snippet.rs | 3 +++ rs_bindings_from_cc/generate_bindings/lib.rs | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/rs_bindings_from_cc/generate_bindings/database/rs_snippet.rs b/rs_bindings_from_cc/generate_bindings/database/rs_snippet.rs index 555773d9a..37a57612a 100644 --- a/rs_bindings_from_cc/generate_bindings/database/rs_snippet.rs +++ b/rs_bindings_from_cc/generate_bindings/database/rs_snippet.rs @@ -247,6 +247,9 @@ pub fn should_derive_copy(record: &Record) -> bool { } } +/// Returns Ok if the type can exist by value. +/// +/// This does not necessarily imply that the type is Rust movable, e.g. trivially relocatable. pub fn check_by_value(record: &Record) -> Result<()> { ensure!( record.destructor != SpecialMemberFunc::Unavailable, diff --git a/rs_bindings_from_cc/generate_bindings/lib.rs b/rs_bindings_from_cc/generate_bindings/lib.rs index a11efa50a..d6c9f0a01 100644 --- a/rs_bindings_from_cc/generate_bindings/lib.rs +++ b/rs_bindings_from_cc/generate_bindings/lib.rs @@ -729,7 +729,11 @@ fn crubit_abi_type(db: &dyn BindingsGenerator, rs_type_kind: RsTypeKind) -> Resu BridgeRsTypeKind::StdString { in_cc_std } => Ok(CrubitAbiType::StdString { in_cc_std }), }, RsTypeKind::Record { record, crate_path, .. } => { - database::rs_snippet::check_by_value(record.as_ref())?; + ensure!( + record.is_unpin(), + "Record {} must be Unpin in order to copy through a bridge buffer", + record.cc_name + ); let rust_type = crate_path .to_fully_qualified_path(make_rs_ident(record.rs_name.identifier.as_ref()));