rust-cpython: replace dyn Iterator<..> of sequence with concrete type
We wouldn't care the cost of the dynamic dispatch, but I feel a concrete
type helps understanding error messages.
--- a/rust/hg-cpython/src/dirstate/dirs_multiset.rs Sun Sep 08 12:00:26 2019 +0900
+++ b/rust/hg-cpython/src/dirstate/dirs_multiset.rs Sun Sep 08 12:07:19 2019 +0900
@@ -18,7 +18,10 @@
use crate::dirstate::extract_dirstate;
use crate::ref_sharing::{PySharedRefCell, PySharedState};
-use hg::{DirsMultiset, DirstateMapError, DirstateParseError, EntryState};
+use hg::{
+ DirsMultiset, DirsMultisetIter, DirstateMapError, DirstateParseError,
+ EntryState,
+};
py_class!(pub class Dirs |py| {
data inner: PySharedRefCell<DirsMultiset>;
@@ -90,7 +93,7 @@
DirsMultisetKeysIterator::create_instance(
py,
RefCell::new(Some(leak_handle)),
- RefCell::new(Box::new(leaked_ref.iter())),
+ RefCell::new(leaked_ref.iter()),
)
}
@@ -118,10 +121,10 @@
}
}
-py_shared_sequence_iterator!(
+py_shared_iterator_impl!(
DirsMultisetKeysIterator,
DirsMultisetLeakedRef,
- Vec<u8>,
+ DirsMultisetIter<'static>,
Dirs::translate_key,
Option<PyBytes>
);
--- a/rust/hg-cpython/src/ref_sharing.rs Sun Sep 08 12:00:26 2019 +0900
+++ b/rust/hg-cpython/src/ref_sharing.rs Sun Sep 08 12:07:19 2019 +0900
@@ -417,23 +417,3 @@
);
};
}
-
-/// Works basically the same as `py_shared_mapping_iterator`, but with only a
-/// key.
-macro_rules! py_shared_sequence_iterator {
- (
- $name:ident,
- $leaked:ident,
- $key_type: ty,
- $success_func: path,
- $success_type: ty
- ) => {
- py_shared_iterator_impl!(
- $name,
- $leaked,
- Box<dyn Iterator<Item = &'static $key_type> + Send>,
- $success_func,
- $success_type
- );
- };
-}