Derive Macro rustpython_derive::Traverse

source ·
#[derive(Traverse)]
{
    // Attributes available to this derive:
    #[pytraverse]
}
Expand description

use on struct with named fields like struct A{x:PyRef<B>, y:PyRef<C>} to impl Traverse for datatype.

use #[pytraverse(skip)] on fields you wish not to trace

add trace attr to #[pyclass] to make it impl MaybeTraverse that will call Traverse’s traverse method so make it traceable(Even from type-erased PyObject)(i.e. write #[pyclass(trace)]).

§Example

#[pyclass(module = false, traverse)]
#[derive(Default, Traverse)]
pub struct PyList {
    elements: PyRwLock<Vec<PyObjectRef>>,
    #[pytraverse(skip)]
    len: AtomicCell<usize>,
}

This create both MaybeTraverse that call Traverse‘s traverse method and Traverse that impl Traverse for PyList which call elements’ traverse method and ignore len field.