comet/internal/
trace_trait.rs1use crate::visitor::Visitor;
2
3pub type TraceCallback = extern "C" fn(*mut Visitor, *const u8);
4
5pub trait TraceTrait: Sized {
7 fn trace(&self, vis: &mut Visitor) {
10 let _ = vis;
11 }
12 extern "C" fn trace_(vis: *mut Visitor, this: *const u8) {
14 unsafe {
15 (*this.cast::<Self>()).trace(&mut *vis);
16 }
17 }
18 fn get_trace_descriptor(this: *const u8) -> TraceDescriptor {
20 TraceDescriptor {
21 base_object_payload: this,
22 callback: Self::trace_,
23 }
24 }
25}
26
27pub struct TraceDescriptor {
29 pub base_object_payload: *const u8,
30 pub callback: TraceCallback,
31}