Source: Playground
use std::sync::{Condvar, Mutex};
#[derive(Debug)]
pub struct Worker<'a> {
new_cond: Condvar,
workers: Vec<&'a str>,
}
#[derive(Debug)]
pub struct Master<'a> {
address: &'a str,
mu_workers: Mutex<Worker<'a>>,
}
impl<'a> Master<'a> {
fn new(master: &'a str) -> Self {
Master {
address: master,
mu_workers: Mutex::new(Worker {
new_cond: Condvar::new(),
workers: Vec::new(),
}),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_master() {
let master = Master::new("master");
let mut lock = master.mu_workers.try_lock();
if let Ok(ref mut mutex) = lock {
mutex.mu_workers.push("Tom"); // Err: no field `mu_workers` on type `&mut std::sync::MutexGuard<'_, Worker<'_>>`
} else {
println!("try_lock failed");
}
assert_eq!(master.mu_workers.lock().unwrap().workers[0], "Tom")
}
}