On 6/26/25 16:25, Danilo Krummrich wrote: > On 6/20/25 5:24 PM, Igor Korotin wrote: >> +impl DeviceId { >> + const ACPI_ID_LEN: usize = 16; >> + >> + /// Create a new device id from an ACPI 'id' string. >> + pub const fn new<const N: usize>(id: &[u8; N]) -> Self { > > Didn't notice before, but why was this silently changed from &CStr to > &[u8; N] > from v6 to v7? > >> + build_assert!(N <= Self::ACPI_ID_LEN, "ID exceeds 16 bytes"); >> + // Replace with `bindings::acpi_device_id::default()` once >> stabilized for `const`. >> + // SAFETY: FFI type is valid to be zero-initialized. >> + let mut acpi: bindings::acpi_device_id = unsafe >> { core::mem::zeroed() }; >> + let mut i = 0; >> + while i < N { >> + acpi.id[i] = id[i]; >> + i += 1; >> + } >> + >> + Self(acpi) >> + } >> +} In v6 I was asked to change assert! (runtime) to build_assert! (build time) It was as follows: > + pub const fn new(id: &'static CStr) -> Self { > + assert!(id.len() <= Self::ACPI_ID_LEN, "ID exceeds 16 bytes"); but id.len() breaks const context and so build_assert! triggers assertion. If I needed to explicitly describe change from CStr to [u8;20], then it's my bad. Thanks, Igor