use syrette::injectable; use syrette::ptr::{FactoryPtr, TransientPtr}; use crate::interfaces::user::{IUser, IUserFactory}; use crate::interfaces::user_manager::IUserManager; pub struct UserManager { users: Vec>, user_factory: FactoryPtr, } #[injectable(IUserManager)] impl UserManager { pub fn new(user_factory: FactoryPtr) -> Self { Self { users: Vec::new(), user_factory, } } } impl IUserManager for UserManager { fn fill_with_users(&mut self) { self.users .push((self.user_factory)("Bob", "1983-04-13", "abc1234")); self.users .push((self.user_factory)("Anna", "1998-01-20", "IlovemYCat")); self.users .push((self.user_factory)("David", "2000-11-05", "12345678")); } fn print_users(&self) { for user in &self.users { println!( "{}, born {}, password is '{}'", user.get_name(), user.get_date_of_birth(), user.get_password() ); } } }