What's so special about the i32 type here?

Rust will pick a specific integer type if there's some type inference which indicates which is intended. If there isn't, i32 is the fallback type for unconstrained integers.

When there's one possibility for the TryFrom, that will be the inference. If there is more than one possibility, though, it won't choose between them and ends up falling back to i32. If you add i32 to the list (without making the list complete), it will work (due to the fallback, not inference). But as @scottmcm said, better to do them all if sensible.