pub struct RefReader { /* private fields */ }Expand description
Reference reader for resolving shared references during deserialization.
RefReader maintains a vector of previously deserialized objects that can be referenced by ID. When a reference is encountered during deserialization, the RefReader can return the previously deserialized object instead of deserializing it again.
§Examples
use fory_core::resolver::ref_resolver::RefReader;
use std::rc::Rc;
let mut ref_reader = RefReader::new();
let rc = Rc::new(42);
// Store an object for later reference
let ref_id = ref_reader.store_rc_ref(rc.clone());
// Retrieve the object by reference ID
let retrieved = ref_reader.get_rc_ref::<i32>(ref_id).unwrap();
assert!(Rc::ptr_eq(&rc, &retrieved));Implementations§
Source§impl RefReader
impl RefReader
Sourcepub fn reserve_ref_id(&mut self) -> u32
pub fn reserve_ref_id(&mut self) -> u32
Reserve a reference ID slot without storing anything yet.
Returns the reserved reference ID that will be used when storing the object later.
Sourcepub fn store_rc_ref_at<T: 'static + ?Sized>(&mut self, ref_id: u32, rc: Rc<T>)
pub fn store_rc_ref_at<T: 'static + ?Sized>(&mut self, ref_id: u32, rc: Rc<T>)
Store an Rc<T> at a previously reserved reference ID.
§Arguments
ref_id- The reference ID that was reservedrc- The Rc to store
Sourcepub fn store_rc_ref<T: 'static + ?Sized>(&mut self, rc: Rc<T>) -> u32
pub fn store_rc_ref<T: 'static + ?Sized>(&mut self, rc: Rc<T>) -> u32
Sourcepub fn store_arc_ref_at<T: 'static + ?Sized>(
&mut self,
ref_id: u32,
arc: Arc<T>,
)
pub fn store_arc_ref_at<T: 'static + ?Sized>( &mut self, ref_id: u32, arc: Arc<T>, )
Store an Arc<T> at a previously reserved reference ID.
§Arguments
ref_id- The reference ID that was reservedarc- The Arc to store
Sourcepub fn store_arc_ref<T: 'static + ?Sized>(&mut self, arc: Arc<T>) -> u32
pub fn store_arc_ref<T: 'static + ?Sized>(&mut self, arc: Arc<T>) -> u32
Sourcepub fn add_callback(&mut self, callback: Box<dyn FnOnce(&RefReader)>)
pub fn add_callback(&mut self, callback: Box<dyn FnOnce(&RefReader)>)
Add a callback to be executed when weak references are resolved.
§Arguments
callback- A closure that takes a reference to the RefReader
Sourcepub fn resolve_callbacks(&mut self)
pub fn resolve_callbacks(&mut self)
Execute all pending callbacks to resolve weak pointer references.
This should be called after deserialization completes to update any weak pointers that referenced objects which were not yet available during deserialization.