And chiming in:
> there's no reason why you couldn’t safely promote a u8, u16, or u32 into a usize
The people running Rust on a 16-bit architecture (e.g. AVR) would disagree. On those platforms, usize is 16-bit, so promoting u32 to usize would not be possible.
I _do_ wish there was a nicer way to declare up-front "I *never* want this crate to compile on something smaller than 32-bit (or 64-bit), so assume that".
IIRC, similar ideas like this have floated around under the name of a "platform compatibility lint".