|  | @@ -6,13 +6,13 @@ use tokio::time::{timeout, Duration};
 | 
	
		
			
				|  |  |  const LOCK_TIMEOUT: u64 = 30;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #[derive(Clone)]
 | 
	
		
			
				|  |  | -pub struct Shard<T> {
 | 
	
		
			
				|  |  | +pub struct Shared<T> {
 | 
	
		
			
				|  |  |      pub data: Arc<Mutex<T>>,
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -impl<T> Shard<T> {
 | 
	
		
			
				|  |  | +impl<T> Shared<T> {
 | 
	
		
			
				|  |  |      pub fn new(data: T) -> Self {
 | 
	
		
			
				|  |  | -        Shard {
 | 
	
		
			
				|  |  | +        Shared {
 | 
	
		
			
				|  |  |              data: Arc::new(Mutex::new(data)),
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -21,9 +21,71 @@ impl<T> Shard<T> {
 | 
	
		
			
				|  |  |      ///
 | 
	
		
			
				|  |  |      /// Using:
 | 
	
		
			
				|  |  |      /// ```
 | 
	
		
			
				|  |  | -    /// {
 | 
	
		
			
				|  |  | -    ///    let data = shared.lock().await;
 | 
	
		
			
				|  |  | -    ///    // make changes to T
 | 
	
		
			
				|  |  | +    /// use shared::Shared;
 | 
	
		
			
				|  |  | +    /// 
 | 
	
		
			
				|  |  | +    /// #[derive(Clone)]
 | 
	
		
			
				|  |  | +    /// struct Post {
 | 
	
		
			
				|  |  | +    ///     pub id: i32,
 | 
	
		
			
				|  |  | +    ///     pub title: String,
 | 
	
		
			
				|  |  | +    ///     pub author: String,
 | 
	
		
			
				|  |  | +    /// }
 | 
	
		
			
				|  |  | +    /// 
 | 
	
		
			
				|  |  | +    /// #[derive(Clone)]
 | 
	
		
			
				|  |  | +    /// struct ExampleData {
 | 
	
		
			
				|  |  | +    ///     pub name: String,
 | 
	
		
			
				|  |  | +    ///     pub age: u16,
 | 
	
		
			
				|  |  | +    ///     pub last_post: Shared<Post>
 | 
	
		
			
				|  |  | +    /// }
 | 
	
		
			
				|  |  | +    /// 
 | 
	
		
			
				|  |  | +    /// async fn do_something(shared: Shared<ExampleData>) {
 | 
	
		
			
				|  |  | +    ///     let mut example = shared.lock().await;
 | 
	
		
			
				|  |  | +    ///     example.age += 1;
 | 
	
		
			
				|  |  | +    ///     {
 | 
	
		
			
				|  |  | +    ///         let mut post = example.last_post.lock().await;
 | 
	
		
			
				|  |  | +    ///         post.id += 1;
 | 
	
		
			
				|  |  | +    ///         post.title = "Sharing Data in Rust, It's Easy".to_string();
 | 
	
		
			
				|  |  | +    ///     }
 | 
	
		
			
				|  |  | +    /// }
 | 
	
		
			
				|  |  | +    /// 
 | 
	
		
			
				|  |  | +    /// #[tokio::main]
 | 
	
		
			
				|  |  | +    /// async fn main() {
 | 
	
		
			
				|  |  | +    ///     let ex_data = Shared::new(ExampleData{
 | 
	
		
			
				|  |  | +    ///         name: "Test Dummy".to_string(),
 | 
	
		
			
				|  |  | +    ///         age: 30,
 | 
	
		
			
				|  |  | +    ///         last_post: Shared::new(Post{
 | 
	
		
			
				|  |  | +    ///             id: 10,
 | 
	
		
			
				|  |  | +    ///             title: "Sharing Data in Rust, The Easy Way".to_string(),
 | 
	
		
			
				|  |  | +    ///             author: "Test Dummy".to_string(),
 | 
	
		
			
				|  |  | +    ///         })
 | 
	
		
			
				|  |  | +    ///     });
 | 
	
		
			
				|  |  | +    /// 
 | 
	
		
			
				|  |  | +    ///     {
 | 
	
		
			
				|  |  | +    ///         let example = ex_data.lock().await;
 | 
	
		
			
				|  |  | +    ///         println!("Before:");
 | 
	
		
			
				|  |  | +    ///         println!("name: {}", example.name);
 | 
	
		
			
				|  |  | +    ///         println!("age:  {}", example.age);
 | 
	
		
			
				|  |  | +    ///         {
 | 
	
		
			
				|  |  | +    ///             let post = example.last_post.lock().await;
 | 
	
		
			
				|  |  | +    ///             println!("last_post.id:     {}", post.id);
 | 
	
		
			
				|  |  | +    ///             println!("last_post.title:  {}", post.title);
 | 
	
		
			
				|  |  | +    ///             println!("last_post.author: {}", post.author);
 | 
	
		
			
				|  |  | +    ///         }
 | 
	
		
			
				|  |  | +    ///     }
 | 
	
		
			
				|  |  | +    /// 
 | 
	
		
			
				|  |  | +    ///     do_something(ex_data.clone()).await;
 | 
	
		
			
				|  |  | +    /// 
 | 
	
		
			
				|  |  | +    ///     {
 | 
	
		
			
				|  |  | +    ///         let example = ex_data.lock().await;
 | 
	
		
			
				|  |  | +    ///         println!("Before:");
 | 
	
		
			
				|  |  | +    ///         println!("name: {}", example.name);
 | 
	
		
			
				|  |  | +    ///         println!("age:  {}", example.age);
 | 
	
		
			
				|  |  | +    ///         {
 | 
	
		
			
				|  |  | +    ///             let post = example.last_post.lock().await;
 | 
	
		
			
				|  |  | +    ///             println!("last_post.id:     {}", post.id);
 | 
	
		
			
				|  |  | +    ///             println!("last_post.title:  {}", post.title);
 | 
	
		
			
				|  |  | +    ///             println!("last_post.author: {}", post.author);
 | 
	
		
			
				|  |  | +    ///         }
 | 
	
		
			
				|  |  | +    ///     }
 | 
	
		
			
				|  |  |      /// }
 | 
	
		
			
				|  |  |      /// ```
 | 
	
		
			
				|  |  |      pub async fn lock(&self) -> MutexGuard<'_, T> {
 |