diff --git a/implementations/rust/preserves/src/value/signed_integer.rs b/implementations/rust/preserves/src/value/signed_integer.rs index d6c00f3..732feeb 100644 --- a/implementations/rust/preserves/src/value/signed_integer.rs +++ b/implementations/rust/preserves/src/value/signed_integer.rs @@ -81,6 +81,30 @@ impl SignedInteger { } } +impl From for SignedInteger { + fn from(v: i32) -> Self { + SignedInteger(SignedIntegerRepr::I128(v.into())) + } +} + +impl From for SignedInteger { + fn from(v: u32) -> Self { + SignedInteger(SignedIntegerRepr::I128(v.into())) + } +} + +impl From for SignedInteger { + fn from(v: i64) -> Self { + SignedInteger(SignedIntegerRepr::I128(v.into())) + } +} + +impl From for SignedInteger { + fn from(v: u64) -> Self { + SignedInteger(SignedIntegerRepr::I128(v.into())) + } +} + impl From for SignedInteger { fn from(v: i128) -> Self { SignedInteger(SignedIntegerRepr::I128(v)) @@ -151,6 +175,20 @@ impl<'a> From<&'a SignedInteger> for BigInt { } } +impl TryFrom<&SignedInteger> for i32 { + type Error = (); + fn try_from(v: &SignedInteger) -> Result { + i128::try_from(v)?.try_into().map_err(|_| ()) + } +} + +impl TryFrom<&SignedInteger> for u32 { + type Error = (); + fn try_from(v: &SignedInteger) -> Result { + u128::try_from(v)?.try_into().map_err(|_| ()) + } +} + impl TryFrom<&SignedInteger> for i64 { type Error = (); fn try_from(v: &SignedInteger) -> Result {