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.