Something like this:
type Job<T> = Box<dyn FnOnce(&mut Option<T>) + Send>;
let (sender, receiver) = channel::<Job<T>>();
let join_handle = thread::spawn(move || {
let mut obj = match constructor() {
Ok(x) => Some(x),
Err(err) => {
error!("Initialiazion cause error: {}", err);
None
}
};
loop {
match receiver.recv() {
Ok(x) => x(&mut obj),
Err(err) => {
trace!("thread pool({}) recv error: {}", name, err);
break;
}
}
}
});
So you can create sqlite handle inside thread, and then send via channel FnOnce(&mut Option<rusqlite::Connection>