Move `TryFromPyCell` trait to `derive_utils` module
This commit is contained in:
parent
b3c937c73a
commit
378a6a484c
|
@ -3,8 +3,8 @@
|
|||
//! Trait and support implementation for implementing iterators
|
||||
|
||||
use crate::callback::IntoPyCallbackOutput;
|
||||
use crate::derive_utils::TryFromPyCell;
|
||||
use crate::err::PyResult;
|
||||
use crate::pycell::TryFromPyCell;
|
||||
use crate::{ffi, IntoPy, IntoPyPointer, PyClass, PyObject, Python};
|
||||
|
||||
/// Python Iterator Interface.
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
|
||||
//! Functionality for the code generated by the derive backend
|
||||
|
||||
use crate::err::PyResult;
|
||||
use crate::err::{PyErr, PyResult};
|
||||
use crate::exceptions::TypeError;
|
||||
use crate::instance::PyNativeType;
|
||||
use crate::pyclass::PyClass;
|
||||
use crate::pyclass_init::PyClassInitializer;
|
||||
use crate::types::{PyAny, PyDict, PyModule, PyTuple};
|
||||
use crate::{ffi, GILPool, IntoPy, PyObject, Python};
|
||||
use crate::{ffi, GILPool, IntoPy, PyCell, PyObject, Python};
|
||||
use std::cell::UnsafeCell;
|
||||
|
||||
/// Description of a python parameter; used for `parse_args()`.
|
||||
|
@ -243,3 +243,25 @@ where
|
|||
{
|
||||
type Target = T;
|
||||
}
|
||||
|
||||
/// A trait for types that can be borrowed from a cell.
|
||||
///
|
||||
/// This serves to unify the use of `PyRef` and `PyRefMut` in automatically
|
||||
/// derived code, since both types can be obtained from a `PyCell`.
|
||||
#[doc(hidden)]
|
||||
pub trait TryFromPyCell<'a, T: PyClass>: Sized {
|
||||
type Error: Into<PyErr>;
|
||||
fn try_from_pycell(cell: &'a crate::PyCell<T>) -> Result<Self, Self::Error>;
|
||||
}
|
||||
|
||||
impl<'a, T, R> TryFromPyCell<'a, T> for R
|
||||
where
|
||||
T: 'a + PyClass,
|
||||
R: std::convert::TryFrom<&'a PyCell<T>>,
|
||||
R::Error: Into<PyErr>,
|
||||
{
|
||||
type Error = R::Error;
|
||||
fn try_from_pycell(cell: &'a crate::PyCell<T>) -> Result<Self, Self::Error> {
|
||||
<R as std::convert::TryFrom<&'a PyCell<T>>>::try_from(cell)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -647,27 +647,6 @@ impl<T: PyClass + fmt::Debug> fmt::Debug for PyRefMut<'_, T> {
|
|||
}
|
||||
}
|
||||
|
||||
/// A trait for types that can be borrowed from a cell.
|
||||
///
|
||||
/// This serves to unify the use of `PyRef` and `PyRefMut` in automatically
|
||||
/// derived code, since both types can be obtained from a `PyCell`.
|
||||
pub trait TryFromPyCell<'a, T: PyClass>: Sized {
|
||||
type Error: Into<PyErr>;
|
||||
fn try_from_pycell(cell: &'a crate::PyCell<T>) -> Result<Self, Self::Error>;
|
||||
}
|
||||
|
||||
impl<'a, T, R> TryFromPyCell<'a, T> for R
|
||||
where
|
||||
T: 'a + PyClass,
|
||||
R: std::convert::TryFrom<&'a PyCell<T>>,
|
||||
R::Error: Into<PyErr>,
|
||||
{
|
||||
type Error = R::Error;
|
||||
fn try_from_pycell(cell: &'a crate::PyCell<T>) -> Result<Self, Self::Error> {
|
||||
<R as std::convert::TryFrom<&'a PyCell<T>>>::try_from(cell)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Eq, PartialEq)]
|
||||
struct BorrowFlag(usize);
|
||||
|
||||
|
|
Loading…
Reference in New Issue