get_size2/impls/std_impls/
sync.rs1use std::sync::{Mutex, OnceLock, RwLock};
2
3use crate::{GetSize, GetSizeTracker};
4
5impl<T> GetSize for Mutex<T>
6where
7 T: GetSize,
8{
9 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
10 let guard = self
12 .lock()
13 .unwrap_or_else(std::sync::PoisonError::into_inner);
14 T::get_heap_size_with_tracker(&*guard, tracker)
15 }
16}
17
18impl<T> GetSize for RwLock<T>
19where
20 T: GetSize,
21{
22 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
23 let guard = self
25 .read()
26 .unwrap_or_else(std::sync::PoisonError::into_inner);
27 T::get_heap_size_with_tracker(&*guard, tracker)
28 }
29}
30
31impl<T> GetSize for OnceLock<T>
32where
33 T: GetSize,
34{
35 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
36 match self.get() {
38 None => (0, tracker),
39 Some(value) => T::get_heap_size_with_tracker(value, tracker),
40 }
41 }
42}