Como converter tipos genéricos que eu sei serem inteiros?

Quero verificar os códigos de retorno das APIs C de maneira genérica e o resultado deve estar livre de tipos C, comolibc::c_int. Existem maneiras de escrever uma função como

fn check<S: PartialOrd + std::num::Zero, T> (x: S) -> Option<T> {
    if std::num::zero::<S>() <= x { Some(x as T) }
    else { None }
}

quando tenho certeza queS eT são tipos integrais para todos os usos decheck()? O compilador rejeita meu código reclamandoerror: non-scalar cast: `S` as `T`

questionAnswers(1)

yourAnswerToTheQuestion