I don't think the mechanics of being able to convey a niche are stable/developer-accessible, but NonZero is a type provided by the standard library:
https://doc.rust-lang.org/std/num/struct.NonZero.htmlAn example of the niche optimisations is in that link; if a 32bit number is NonZero, you can put that in an Option, and your Option<NonZero<u32>> will be the same size as a normal u32.