⚠️ Internal Docs ⚠️ Not Public API 👉 Official Docs Here

Trait PyFunctionArgument

Source
pub trait PyFunctionArgument<'a, 'py, const IS_OPTION: bool>: Sized + 'a {
    type Holder: FunctionArgumentHolder;

    // Required method
    fn extract(
        obj: &'a Bound<'py, PyAny>,
        holder: &'a mut Self::Holder,
    ) -> PyResult<Self>;
}
Expand description

A trait which is used to help PyO3 macros extract function arguments.

#[pyclass] structs need to extract as PyRef<T> and PyRefMut<T> wrappers rather than extracting &T and &mut T directly. The Holder type is used to hold these temporary wrappers - the way the macro is constructed, these wrappers will be dropped as soon as the pyfunction call ends.

There exists a trivial blanket implementation for T: FromPyObject with Holder = ().

Required Associated Types§

Required Methods§

Source

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder, ) -> PyResult<Self>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'a, 'py, T> PyFunctionArgument<'a, 'py, true> for Option<T>
where T: PyFunctionArgument<'a, 'py, false>,

Source§

type Holder = <T as PyFunctionArgument<'a, 'py, false>>::Holder

Source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut T::Holder, ) -> PyResult<Self>

Implementors§

Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a Coroutine

Available on crate feature experimental-async only.
Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut Coroutine

Available on crate feature experimental-async only.
Source§

impl<'a, 'py, T> PyFunctionArgument<'a, 'py, false> for &'a Bound<'py, T>
where T: PyTypeCheck + 'py,

Source§

impl<'a, 'py, T> PyFunctionArgument<'a, 'py, false> for T
where T: FromPyObjectBound<'a, 'py> + 'a,

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ComplexEnum

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a MixedComplexEnum

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a SimpleEnum

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a SimpleTupleEnum

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a TupleEnum

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a FutureAwaitable

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a IterAwaitable

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a BytesExtractor

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a Eq

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a EqDefaultNe

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a EqDerived

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a Ordered

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a OrderedDefaultNe

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a TzClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a DictSize

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ComplexEnum_EmptyStruct

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ComplexEnum_Float

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ComplexEnum_Int

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ComplexEnum_MultiFieldStruct

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ComplexEnum_Str

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ComplexEnum_VariantWithDefault

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a MixedComplexEnum_Empty

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a MixedComplexEnum_Nothing

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a SimpleTupleEnum_Int

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a SimpleTupleEnum_Str

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a TupleEnum_EmptyTuple

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a TupleEnum_Full

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a TupleEnum_FullWithDefault

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a LockHolder

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ObjStore

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ModClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a AssertingBaseClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ClassWithDict

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a ClassWithoutConstructor

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a EmptyClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a PyClassIter

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a PyClassThreadIter

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a Subclassable

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut SimpleEnum

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut FutureAwaitable

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut IterAwaitable

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut BytesExtractor

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut Eq

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut EqDefaultNe

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut EqDerived

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut Ordered

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut OrderedDefaultNe

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut TzClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut DictSize

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut LockHolder

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut ObjStore

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut ModClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut AssertingBaseClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut ClassWithDict

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut ClassWithoutConstructor

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut EmptyClass

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut PyClassIter

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut PyClassThreadIter

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut Subclassable