##// END OF EJS Templates
rust-index: synchronize remove to Rust index...
rust-index: synchronize remove to Rust index Future steps will bring the two indexes further together until we can rip the C index entirely when running Rust code.

File last commit:

r51872:4c5f6e95 default
r52088:f6403bcd default
Show More
conversion.rs
46 lines | 1.5 KiB | application/rls-services+xml | RustLexer
Georges Racinet
rust-cpython: moved generic conversion fn out of ancestors module...
r41276 // conversion.rs
//
// Copyright 2019 Georges Racinet <georges.racinet@octobus.net>
//
// This software may be used and distributed according to the terms of the
// GNU General Public License version 2 or any later version.
//! Bindings for the hg::ancestors module provided by the
//! `hg-core` crate. From Python, this will be seen as `rustext.ancestor`
Raphaël Gomès
rust: make `Revision` a newtype...
r51872 use cpython::{ObjectProtocol, PyErr, PyObject, PyResult, Python};
use hg::{Revision, RevlogIndex, UncheckedRevision};
use crate::{exceptions::GraphError, PyRevision};
Georges Racinet
rust-cpython: moved generic conversion fn out of ancestors module...
r41276
/// 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<Item=Revision>` arguments, because
/// a `PyErr` can arise at each step of iteration, whereas these methods
/// expect iterables over `Revision`, not over some `Result<Revision, PyErr>`
Raphaël Gomès
rust: make `Revision` a newtype...
r51872 pub fn rev_pyiter_collect<C, I>(
py: Python,
revs: &PyObject,
index: &I,
) -> PyResult<C>
Georges Racinet
rust-cpython: moved generic conversion fn out of ancestors module...
r41276 where
C: FromIterator<Revision>,
Raphaël Gomès
rust: make `Revision` a newtype...
r51872 I: RevlogIndex,
Georges Racinet
rust-cpython: moved generic conversion fn out of ancestors module...
r41276 {
revs.iter(py)?
Raphaël Gomès
rust: make `Revision` a newtype...
r51872 .map(|r| {
r.and_then(|o| match o.extract::<PyRevision>(py) {
Ok(r) => index
.check_revision(UncheckedRevision(r.0))
.ok_or_else(|| {
PyErr::new::<GraphError, _>(
py,
("InvalidRevision", r.0),
)
}),
Err(e) => Err(e),
})
})
Georges Racinet
rust-cpython: moved generic conversion fn out of ancestors module...
r41276 .collect()
}