author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Tue, 11 Mar 2025 02:29:42 +0100 | |
branch | stable |
changeset 53042 | cdd7bf612c7b |
parent 52841 | 28f0f00b5dbd |
permissions | -rw-r--r-- |
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
1 |
use pyo3::prelude::*; |
52807
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
2 |
use pyo3::types::{PyList, PySet}; |
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
3 |
|
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
4 |
use hg::revlog::RevlogIndex; |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
5 |
use hg::{BaseRevision, Revision, UncheckedRevision}; |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
6 |
|
52790
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
7 |
use crate::exceptions::{rev_not_in_index, GraphError}; |
52841
28f0f00b5dbd
rust-pyo3: rename the `util` file to `utils`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52838
diff
changeset
|
8 |
use crate::utils::proxy_index_extract; |
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
9 |
|
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
10 |
/// Revision as exposed to/from the Python layer. |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
11 |
/// |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
12 |
/// We need this indirection because of the orphan rule, meaning we can't |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
13 |
/// implement a foreign trait (like [`cpython::ToPyObject`]) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
14 |
/// for a foreign type (like [`hg::UncheckedRevision`]). |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
15 |
/// |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
16 |
/// This also acts as a deterrent against blindly trusting Python to send |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
17 |
/// us valid revision numbers. |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
18 |
#[derive( |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
19 |
Debug, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
20 |
Copy, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
21 |
Clone, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
22 |
PartialEq, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
23 |
Eq, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
24 |
PartialOrd, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
25 |
Ord, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
26 |
Hash, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
27 |
derive_more::From, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
28 |
IntoPyObject, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
29 |
FromPyObject, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
30 |
)] |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
31 |
pub struct PyRevision(pub BaseRevision); |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
32 |
|
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
33 |
impl From<Revision> for PyRevision { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
34 |
fn from(r: Revision) -> Self { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
35 |
PyRevision(r.0) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
36 |
} |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
37 |
} |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
38 |
|
52790
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
39 |
impl From<PyRevision> for UncheckedRevision { |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
40 |
fn from(val: PyRevision) -> Self { |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
41 |
val.0.into() |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
42 |
} |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
43 |
} |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
44 |
|
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
45 |
pub fn check_revision( |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
46 |
index: &impl RevlogIndex, |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
47 |
rev: impl Into<UncheckedRevision>, |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
48 |
) -> PyResult<Revision> { |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
49 |
let rev = rev.into(); |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
50 |
index |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
51 |
.check_revision(rev) |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
52 |
.ok_or_else(|| rev_not_in_index(rev)) |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
53 |
} |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
54 |
|
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
55 |
/// Utility function to convert a Python iterable into various collections |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
56 |
/// |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
57 |
/// We need this in particular |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
58 |
/// - because of the checked upgrade from [`PyRevision`] to [`Revision`]. |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
59 |
/// - to feed to various methods of inner objects with `impl |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
60 |
/// IntoIterator<Item=Revision>` arguments, because a `PyErr` can arise at |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
61 |
/// each step of iteration, whereas these methods expect iterables over |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
62 |
/// `Revision`, not over some `Result<Revision, PyErr>` |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
63 |
pub fn rev_pyiter_collect<C, I>( |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
64 |
revs: &Bound<'_, PyAny>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
65 |
index: &I, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
66 |
) -> PyResult<C> |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
67 |
where |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
68 |
C: FromIterator<Revision>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
69 |
I: RevlogIndex, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
70 |
{ |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
71 |
rev_pyiter_collect_or_else(revs, index, |r| { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
72 |
PyErr::new::<GraphError, _>(("InvalidRevision", r.0)) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
73 |
}) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
74 |
} |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
75 |
|
52534
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
76 |
pub fn rev_pyiter_collect_with_py_index<C>( |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
77 |
revs: &Bound<'_, PyAny>, |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
78 |
proxy_index: &Bound<'_, PyAny>, |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
79 |
) -> PyResult<C> |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
80 |
where |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
81 |
C: FromIterator<Revision>, |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
82 |
{ |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
83 |
// Safety: we don't leak the "faked" reference out of `UnsafePyLeaked` |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
84 |
let borrowed_idx = unsafe { proxy_index_extract(proxy_index)? }; |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
85 |
rev_pyiter_collect(revs, borrowed_idx) |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
86 |
} |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
87 |
|
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
88 |
/// Same as [`rev_pyiter_collect`], giving control on returned errors |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
89 |
pub fn rev_pyiter_collect_or_else<C, I>( |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
90 |
revs: &Bound<'_, PyAny>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
91 |
index: &I, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
92 |
invalid_rev_error: impl FnOnce(PyRevision) -> PyErr + Copy, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
93 |
) -> PyResult<C> |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
94 |
where |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
95 |
C: FromIterator<Revision>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
96 |
I: RevlogIndex, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
97 |
{ |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
98 |
revs.try_iter()? |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
99 |
.map(|r| { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
100 |
r.and_then(|o| match o.extract::<PyRevision>() { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
101 |
Ok(r) => index |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
102 |
.check_revision(UncheckedRevision(r.0)) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
103 |
.ok_or_else(|| invalid_rev_error(r)), |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
104 |
Err(e) => Err(e), |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
105 |
}) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
106 |
}) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
107 |
.collect() |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
108 |
} |
52794
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
109 |
|
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
110 |
pub fn revs_py_list<U>( |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
111 |
py: Python<'_>, |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
112 |
revs: impl IntoIterator<Item = Revision, IntoIter = U>, |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
113 |
) -> PyResult<Py<PyList>> |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
114 |
where |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
115 |
U: ExactSizeIterator<Item = Revision>, |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
116 |
{ |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
117 |
Ok(PyList::new(py, revs.into_iter().map(PyRevision::from))?.unbind()) |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
118 |
} |
52807
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
119 |
|
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
120 |
pub fn revs_py_set<U>( |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
121 |
py: Python<'_>, |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
122 |
revs: impl IntoIterator<Item = Revision, IntoIter = U>, |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
123 |
) -> PyResult<Py<PySet>> |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
124 |
where |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
125 |
U: ExactSizeIterator<Item = Revision>, |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
126 |
{ |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
127 |
Ok(PySet::new(py, revs.into_iter().map(PyRevision::from))?.unbind()) |
0fc15732fe7b
rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
128 |
} |