diff options
Diffstat (limited to 'support/texlab/src/server/query.rs')
-rw-r--r-- | support/texlab/src/server/query.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/support/texlab/src/server/query.rs b/support/texlab/src/server/query.rs new file mode 100644 index 0000000000..f19d15f85b --- /dev/null +++ b/support/texlab/src/server/query.rs @@ -0,0 +1,32 @@ +use salsa::{DbWithJar, ParallelDatabase}; +use threadpool::ThreadPool; + +use crate::{Database, Db}; + +#[derive(Default)] +pub struct Engine { + db: Database, + pool: ThreadPool, +} + +impl Engine { + pub fn read(&self) -> &dyn Db { + &self.db + } + + pub fn write(&mut self) -> &mut dyn Db { + self.pool.join(); + &mut self.db + } + + pub fn fork<F: FnOnce(&dyn Db) + Send + 'static>(&self, action: F) { + let snapshot = self.db.snapshot(); + self.pool.execute(move || { + action(snapshot.as_jar_db()); + }); + } + + pub fn finish(self) { + self.pool.join(); + } +} |