pub struct PyClassGetterGenerator<ClassT: PyClass, FieldT, Offset: OffsetCalculator<ClassT, FieldT>, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool>(PhantomData<(ClassT, FieldT, Offset)>);
Expand description
Type which uses specialization on impl blocks to determine how to read a field from a Rust pyclass
as part of a #[pyo3(get)]
annotation.
Tuple Fields§
§0: PhantomData<(ClassT, FieldT, Offset)>
Implementations§
Source§impl<ClassT: PyClass, FieldT, Offset: OffsetCalculator<ClassT, FieldT>, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
impl<ClassT: PyClass, FieldT, Offset: OffsetCalculator<ClassT, FieldT>, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
Source§impl<ClassT: PyClass, U, Offset: OffsetCalculator<ClassT, Py<U>>, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> PyClassGetterGenerator<ClassT, Py<U>, Offset, true, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
impl<ClassT: PyClass, U, Offset: OffsetCalculator<ClassT, Py<U>>, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> PyClassGetterGenerator<ClassT, Py<U>, Offset, true, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
Sourcepub fn generate(
&self,
name: &'static CStr,
doc: &'static CStr,
) -> PyMethodDefType
pub fn generate( &self, name: &'static CStr, doc: &'static CStr, ) -> PyMethodDefType
Py<T>
fields have a potential optimization to use Python’s “struct members” to read
the field directly from the struct, rather than using a getter function.
This is the most efficient operation the Python interpreter could possibly do to read a field, but it’s only possible for us to allow this for frozen classes.
Source§impl<ClassT: PyClass, FieldT: ToPyObject, Offset: OffsetCalculator<ClassT, FieldT>, const IMPLEMENTS_INTOPY: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, false, true, IMPLEMENTS_INTOPY, false, false>
impl<ClassT: PyClass, FieldT: ToPyObject, Offset: OffsetCalculator<ClassT, FieldT>, const IMPLEMENTS_INTOPY: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, false, true, IMPLEMENTS_INTOPY, false, false>
Fallback case; Field is not Py<T>
; try to use ToPyObject
to avoid potentially expensive
clones of containers like Vec
pub const fn generate( &self, name: &'static CStr, doc: &'static CStr, ) -> PyMethodDefType
Source§impl<ClassT, FieldT, Offset, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, false, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, true, IMPLEMENTS_INTOPYOBJECT>where
ClassT: PyClass,
for<'a, 'py> &'a FieldT: IntoPyObject<'py>,
Offset: OffsetCalculator<ClassT, FieldT>,
impl<ClassT, FieldT, Offset, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, false, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, true, IMPLEMENTS_INTOPYOBJECT>where
ClassT: PyClass,
for<'a, 'py> &'a FieldT: IntoPyObject<'py>,
Offset: OffsetCalculator<ClassT, FieldT>,
Field is not Py<T>
; try to use IntoPyObject
for &T
(prefered over ToPyObject
) to avoid
potentially expensive clones of containers like Vec
pub const fn generate( &self, name: &'static CStr, doc: &'static CStr, ) -> PyMethodDefType
Source§impl<ClassT, FieldT, Offset, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, false, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, false, true>where
ClassT: PyClass,
Offset: OffsetCalculator<ClassT, FieldT>,
for<'py> FieldT: IntoPyObject<'py> + Clone,
impl<ClassT, FieldT, Offset, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool> PyClassGetterGenerator<ClassT, FieldT, Offset, false, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, false, true>where
ClassT: PyClass,
Offset: OffsetCalculator<ClassT, FieldT>,
for<'py> FieldT: IntoPyObject<'py> + Clone,
Temporary case to prefer IntoPyObject + Clone
over IntoPy + Clone
, while still showing the
IntoPyObject
suggestion if neither is implemented;
pub const fn generate( &self, name: &'static CStr, doc: &'static CStr, ) -> PyMethodDefType
Source§impl<ClassT, FieldT, Offset> PyClassGetterGenerator<ClassT, FieldT, Offset, false, false, true, false, false>
impl<ClassT, FieldT, Offset> PyClassGetterGenerator<ClassT, FieldT, Offset, false, false, true, false, false>
IntoPy + Clone fallback case, which was the only behaviour before PyO3 0.22.
pub const fn generate( &self, name: &'static CStr, doc: &'static CStr, ) -> PyMethodDefType
Source§impl<ClassT: PyClass, FieldT, Offset: OffsetCalculator<ClassT, FieldT>> PyClassGetterGenerator<ClassT, FieldT, Offset, false, false, false, false, false>
impl<ClassT: PyClass, FieldT, Offset: OffsetCalculator<ClassT, FieldT>> PyClassGetterGenerator<ClassT, FieldT, Offset, false, false, false, false, false>
Base case attempts to use IntoPyObject + Clone
pub const fn generate(
&self,
_name: &'static CStr,
_doc: &'static CStr,
) -> PyMethodDefTypewhere
for<'py> FieldT: PyO3GetField<'py>,
Auto Trait Implementations§
impl<ClassT, FieldT, Offset, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> Freeze for PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
impl<ClassT, FieldT, Offset, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> RefUnwindSafe for PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
impl<ClassT, FieldT, Offset, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> Send for PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
impl<ClassT, FieldT, Offset, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> Sync for PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
impl<ClassT, FieldT, Offset, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> Unpin for PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
impl<ClassT, FieldT, Offset, const IS_PY_T: bool, const IMPLEMENTS_TOPYOBJECT: bool, const IMPLEMENTS_INTOPY: bool, const IMPLEMENTS_INTOPYOBJECT_REF: bool, const IMPLEMENTS_INTOPYOBJECT: bool> UnwindSafe for PyClassGetterGenerator<ClassT, FieldT, Offset, IS_PY_T, IMPLEMENTS_TOPYOBJECT, IMPLEMENTS_INTOPY, IMPLEMENTS_INTOPYOBJECT_REF, IMPLEMENTS_INTOPYOBJECT>
Blanket Implementations§
Source§impl<T> AssertNotZeroSized for T
impl<T> AssertNotZeroSized for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more