From 9f8015afc11677c203e704a4a48be520ea24ea50 Mon Sep 17 00:00:00 2001 From: "Kevin R. Thornton" Date: Mon, 15 Aug 2022 13:52:10 -0700 Subject: [PATCH] refactor: Conversion from row id to usize is now fallible. BREAKING CHANGE: TryFrom replaces From. --- examples/forward_simulation.rs | 4 ++-- src/_macros.rs | 13 ++++++++++--- src/test_simplification.rs | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/examples/forward_simulation.rs b/examples/forward_simulation.rs index 20d999269..877f6a468 100644 --- a/examples/forward_simulation.rs +++ b/examples/forward_simulation.rs @@ -368,9 +368,9 @@ fn simplify( Ok(x) => match x { Some(idmap) => { for a in alive.iter_mut() { - a.node0 = idmap[usize::from(a.node0)]; + a.node0 = idmap[usize::try_from(a.node0).unwrap()]; assert!(a.node0 != tskit::NodeId::NULL); - a.node1 = idmap[usize::from(a.node1)]; + a.node1 = idmap[usize::try_from(a.node1).unwrap()]; assert!(a.node1 != tskit::NodeId::NULL); } } diff --git a/src/_macros.rs b/src/_macros.rs index 39ee0ba02..b85dcfcb5 100644 --- a/src/_macros.rs +++ b/src/_macros.rs @@ -248,9 +248,16 @@ macro_rules! impl_id_traits { } } - impl From<$idtype> for usize { - fn from(value: $idtype) -> Self { - value.0 as usize + impl TryFrom<$idtype> for usize { + type Error = crate::TskitError; + fn try_from(value: $idtype) -> Result { + match value.0.try_into() { + Ok(value) => Ok(value), + Err(_) => Err(crate::TskitError::RangeError(format!( + "could not convert {:?} to usize", + value + ))), + } } } diff --git a/src/test_simplification.rs b/src/test_simplification.rs index 49e0c8872..10215724e 100644 --- a/src/test_simplification.rs +++ b/src/test_simplification.rs @@ -37,7 +37,7 @@ mod tests { assert!(idmap_option.is_some()); let idmap = idmap_option.unwrap(); for &i in samples { - assert_ne!(idmap[usize::from(i)], NodeId::NULL); + assert_ne!(idmap[usize::try_from(i).unwrap()], NodeId::NULL); } } }