It seems that the behavior of this is that `to_int` would return `None` if the value is out of bounds of an `int`'s range. However when calling `to_i8`, silent truncation happens when something is between the ranges of `i8` and `int`.

I'm ok with this behavior, but I think that it should be well documented. I'm also more ok with this when the methods to implement are for `i64` and `u64` because that's just saying that you need to be within the threshold of machine integers to return `Some`, which isn't so bad.