diff --git a/src/edge_differences.rs b/src/edge_differences.rs index ac5c7e3cb..1c55d3f4f 100644 --- a/src/edge_differences.rs +++ b/src/edge_differences.rs @@ -28,12 +28,14 @@ impl Drop for LLEdgeDifferenceIterator { } impl LLEdgeDifferenceIterator { - pub fn new_from_treeseq(treeseq: &TreeSequence, flags: bindings::tsk_flags_t) -> Option { + pub fn new_from_treeseq( + treeseq: &TreeSequence, + flags: bindings::tsk_flags_t, + ) -> Result { let mut inner = std::mem::MaybeUninit::::uninit(); - match unsafe { bindings::tsk_diff_iter_init(inner.as_mut_ptr(), treeseq.as_ptr(), flags) } { - x if x < 0 => None, - _ => Some(Self(unsafe { inner.assume_init() })), - } + let code = + unsafe { bindings::tsk_diff_iter_init(inner.as_mut_ptr(), treeseq.as_ptr(), flags) }; + handle_tsk_return_value!(code, Self(unsafe { inner.assume_init() })) } } @@ -191,7 +193,7 @@ impl EdgeDifferencesIterator { pub(crate) fn new_from_treeseq( treeseq: &TreeSequence, flags: bindings::tsk_flags_t, - ) -> Option { + ) -> Result { LLEdgeDifferenceIterator::new_from_treeseq(treeseq, flags).map(|inner| Self { inner, insertion: LLEdgeInsertionList::default(), diff --git a/src/trees.rs b/src/trees.rs index f6abb51be..e31e57e3b 100644 --- a/src/trees.rs +++ b/src/trees.rs @@ -541,14 +541,13 @@ impl TreeSequence { /// Build a lending iterator over edge differences. /// - /// # Returns + /// # Errors /// - /// * None if the `C` back end is unable to allocate + /// * [`TskitError`] if the `C` back end is unable to allocate /// needed memory - /// * `Some(iterator)` otherwise. pub fn edge_differences_iter( &self, - ) -> Option { + ) -> Result { crate::edge_differences::EdgeDifferencesIterator::new_from_treeseq(self, 0) } } @@ -883,7 +882,7 @@ pub(crate) mod test_trees { let treeseq = treeseq_from_small_table_collection_two_trees(); let num_nodes: usize = treeseq.nodes().num_rows().try_into().unwrap(); let mut parents = vec![NodeId::NULL; num_nodes + 1]; - if let Some(mut ediff_iter) = treeseq.edge_differences_iter() { + if let Ok(mut ediff_iter) = treeseq.edge_differences_iter() { let mut tree_iter = treeseq.tree_iterator(0).unwrap(); let mut ntrees = 0; while let Some(diffs) = ediff_iter.next() {