csv_lib/models/
shared.rs

1use std::ops::Deref;
2use std::sync::{Arc, Mutex, MutexGuard};
3
4/// ## Shared struct
5/// Encapsula un `Arc<Mutex<T>>` con acceso simplificado.
6pub struct Shared<T>
7where
8    T: Default,
9{
10    guard: Arc<Mutex<T>>,
11}
12
13impl<T> Shared<T>
14where
15    T: Default,
16{
17    #[inline(always)]
18    pub fn new(element: T) -> Self {
19        Self {
20            guard: Arc::new(Mutex::new(element)),
21        }
22    }
23
24    #[inline(always)]
25    pub fn default() -> Self {
26        Self::new(T::default())
27    }
28
29    #[inline(always)]
30    pub fn lock(&self) -> MutexGuard<'_, T> {
31        self.guard.lock().unwrap()
32    }
33
34    #[inline(always)]
35    pub fn arc(&self) -> Arc<Mutex<T>> {
36        Arc::clone(&self.guard)
37    }
38}
39
40impl<T> Deref for Shared<T>
41where
42    T: Default,
43{
44    type Target = Arc<Mutex<T>>;
45
46    fn deref(&self) -> &Self::Target {
47        &self.guard
48    }
49}