I found out about family of saturating functions and tried some explanation on the tinter but couldn't really grasp what is it for and when is it usefull. Rust documentation to the best of my knowledge is really "robotic" here.

Could anyone please explain (with examples) what is it for?
Thank you

It will give you the valid value closest to the correct value. For addition with results over the max value that is the max value.
For subtraction with results below the minimum value, it is the minimum value (0 for unsigned and 2^(n-1) for signed).

A typical use case for this is when combining two images by adding all their corresponding pixel values together. One would rather that the total amount of red, say, in the resulting pixels does not exceed 255 for a 8 bit color values. Otherwise the combined value might overflow and wrap around to something small, which is not the effect one wants.

Saturating integer addition. Computes self + rhs , saturating at the numeric bounds instead of overflowing.

I'm wondering how that could be made any clearer. When one does a saturating_add of a negative number one is doing a saturating subtraction and of course the lower numeric bound (zero) is where it stops.

I guess it's because the definition is recursive... "saturating integer addition... will saturate at the numeric bounds".

So it only makes sense when you already know that "saturating" means it'll clamp the resulting value to the range of values valid for that type (e.g. [0, 255] for u8).

It's also not the case that saturating subtraction yields the minimum value. The only correct explanation so far is that of @s3bk in this post:

In addition, if you subtract a negative value and you get something too big, the result will be the maximal value of the type, and by symmetry, if you add a negative value and you get something too small, saturation will yield 0 for unsigned or -2^(n-1) for signed types.