pub enum UserData {
BoxedData(Box<RefCell<dyn Any>>),
SharedData(Rc<RefCell<dyn Any>>),
SyncData(Arc<RwLock<dyn Any>>),
NoData,
}Expand description
Represents the user data that is provided to callbacks when they’re invoked.
A UserData object is registered with the callback using one of the
hook commands. The user data can be virtually any type that implements the
Any trait capable of being downcast to its original type. There are
four variants for the user data. Which one to use depends on how the
callback user data is shared. If the data is unique to one callback, then
BoxedData should be enough. For single threaded sharing among more than
one callback, SharedData will do the trick. If, for any odd sort of reason
threading somehow becomes relevant to the user data object, SyncData would
be the variant to use.
The class has 4 creation functions - one for each variant. And a convenience
function that takes a closure that accepts the UserData’s wrapped value
as a parameter. A good way to avoid all the dereferencing it takes to
access the interior objects nested inside the sharing and mutability host
objects.
§Variants
BoxedData- Can hold user data that only one callback uses.SharedData- Can allow more than one callback or other code to hold a cloned copy that references the same user data.SyncData- LikeSharedData, but uses the sync objects internally to allow the user data to be shared among threads.NoData- Represents the absence of data.
Variants§
Implementations§
Source§impl UserData
impl UserData
Sourcepub fn apply<D: 'static, F, R>(&self, f: F) -> R
pub fn apply<D: 'static, F, R>(&self, f: F) -> R
Applies the given function to the wrapped object inside a UserData
object. The type of the wrapped data has to be compatible with the
type of the function’s single parameter, or the downcast won’t work
and apply() will panic.
§Arguments
f- A function, or closure, to invoke with the user data, free of any wrappers. The format of the function needs to beFn(&T) -> R, whereDis the type of the user data; andRis the return type that gets wrapped in anOptionand returned byapply().
§Returns
- Returns the return value of function
fif the downcast is successful.
Sourcepub fn apply_mut<D: 'static, F, R>(&self, f: F) -> R
pub fn apply_mut<D: 'static, F, R>(&self, f: F) -> R
Same as the apply() function except allows mutable access to the
user data contents.
Sourcepub fn get<D: 'static + Clone>(&self) -> Result<D, HexchatError>
pub fn get<D: 'static + Clone>(&self) -> Result<D, HexchatError>
Retrieves the user data from the UserData object. The type of the
user data must be the same as the type of the UserData object, or
the downcast will fail and return an error. The returned data is a
clone of the original value.
§Generic Arguments
D- The type of the user data to retrieve.
§Returns
Ok(user_data)- The user data if the downcast is successful.Err(HexchatError::UserDataCastError)- The error if the downcast fails.
Sourcepub fn set<D: 'static>(&self, value: D) -> Result<(), HexchatError>
pub fn set<D: 'static>(&self, value: D) -> Result<(), HexchatError>
Sets the user data in the UserData object. The type of the user data
must be the same as the type of the UserData object, or the downcast
will fail and return an error.
§Generic Arguments
D- The type of the user data to set.
§Arguments
value- The value to set the user data to.
§Returns
Ok(())- The user data if the downcast is successful.Err(HexchatError::UserDataCastError)- The error if the downcast fails.
Trait Implementations§
Source§impl Clone for UserData
impl Clone for UserData
Source§fn clone(&self) -> Self
fn clone(&self) -> Self
The clone operation for UserData allows each variant to be cloned,
except for BoxedData. The reason BoxedData is prohibited is to
deter sharing a box between callbacks, as that’s not what
a box is meant to be used for. One of the shared variants is more
appropriate to share access to user data.
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more