diff --git a/implementations/rust/preserves/src/value/signed_integer.rs b/implementations/rust/preserves/src/value/signed_integer.rs index 4d38dd7..7dde714 100644 --- a/implementations/rust/preserves/src/value/signed_integer.rs +++ b/implementations/rust/preserves/src/value/signed_integer.rs @@ -144,3 +144,31 @@ impl<'a> From<&'a SignedInteger> for BigInt { } } } + +impl TryFrom<&SignedInteger> for i64 { + type Error = (); + fn try_from(v: &SignedInteger) -> Result { + i128::try_from(v)?.try_into().map_err(|_| ()) + } +} + +impl TryFrom<&SignedInteger> for u64 { + type Error = (); + fn try_from(v: &SignedInteger) -> Result { + u128::try_from(v)?.try_into().map_err(|_| ()) + } +} + +impl TryFrom<&SignedInteger> for isize { + type Error = (); + fn try_from(v: &SignedInteger) -> Result { + i128::try_from(v)?.try_into().map_err(|_| ()) + } +} + +impl TryFrom<&SignedInteger> for usize { + type Error = (); + fn try_from(v: &SignedInteger) -> Result { + u128::try_from(v)?.try_into().map_err(|_| ()) + } +}