If you are doing wrapping arithmetic a lot, there's a convenience wrapper (heh), Wrapping [3], so that if x and y have type Wrapping<i32>, then x + y always wraps (like calling wrapping_add on two i32). There's a Saturating<i32> too but it's nightly-only for now.
The only downside of Rust's approach is that if you have x + y on two plain integers, the language itself doesn't specify whether it will panic (and interrupt the execution of the program) or not. By default, debug builds will panic and release builds wraps (on the understanding that unintended overflows are always a bug, but catching this bug on release builds has some performance penalty, so it isn't caught by default on release), but you can control this by setting overflow-checks = true on the release profile on Cargo.toml [3]
I think future versions of Rust should set overflow-checks = true by default even on release builds, but right now it's only a matter of adding a single line on Cargo.toml to enable it, and almost every program should do it. With this on, x + y will panic on overflow if they are i32, will wrap if they are Wrapping<i32> and will saturate if they are Saturating<i32>
[0] https://doc.rust-lang.org/std/primitive.i32.html#method.wrap...
[1] https://doc.rust-lang.org/std/primitive.i32.html#method.satu...
[2] https://doc.rust-lang.org/std/primitive.i32.html#method.chec...
[3] https://doc.rust-lang.org/stable/std/num/struct.Wrapping.htm...
[4] https://doc.rust-lang.org/cargo/reference/profiles.html#over...