diff -r 26b0a7514f01 -r ff333620a4cc rust/hg-cpython/src/ancestors.rs --- a/rust/hg-cpython/src/ancestors.rs Tue Jan 15 20:24:17 2019 +0100 +++ b/rust/hg-cpython/src/ancestors.rs Sat Jan 12 16:57:04 2019 +0100 @@ -34,6 +34,7 @@ //! [`LazyAncestors`]: struct.LazyAncestors.html //! [`MissingAncestors`]: struct.MissingAncestors.html //! [`AncestorsIterator`]: struct.AncestorsIterator.html +use crate::conversion::rev_pyiter_collect; use cindex::Index; use cpython::{ ObjectProtocol, PyClone, PyDict, PyList, PyModule, PyObject, @@ -46,24 +47,8 @@ MissingAncestors as CoreMissing, }; use std::cell::RefCell; -use std::iter::FromIterator; use std::collections::HashSet; -/// Utility function to convert a Python iterable into various collections -/// -/// We need this in particular to feed to various methods of inner objects -/// with `impl IntoIterator` arguments, because -/// a `PyErr` can arise at each step of iteration, whereas these methods -/// expect iterables over `Revision`, not over some `Result` -fn rev_pyiter_collect(py: Python, revs: &PyObject) -> PyResult -where - C: FromIterator, -{ - revs.iter(py)? - .map(|r| r.and_then(|o| o.extract::(py))) - .collect() -} - py_class!(pub class AncestorsIterator |py| { data inner: RefCell>>;