aboutsummaryrefslogtreecommitdiff
path: root/crates/server/src/project_model.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-09-08 11:15:01 +0100
committerAleksey Kladov <[email protected]>2018-09-08 11:15:01 +0100
commit7daaddb2ac281dcad3ac99496b1cf3f06840887d (patch)
tree3a6c9ac35c0f198c782591b50eb50225769955bb /crates/server/src/project_model.rs
parent326ffcefe09906560a03d3184a2ce76841448702 (diff)
Some abstraction around workers
Diffstat (limited to 'crates/server/src/project_model.rs')
-rw-r--r--crates/server/src/project_model.rs24
1 files changed, 12 insertions, 12 deletions
diff --git a/crates/server/src/project_model.rs b/crates/server/src/project_model.rs
index b9d6872c8..359cf787d 100644
--- a/crates/server/src/project_model.rs
+++ b/crates/server/src/project_model.rs
@@ -3,12 +3,11 @@ use std::{
3 path::{Path, PathBuf}, 3 path::{Path, PathBuf},
4}; 4};
5use cargo_metadata::{metadata_run, CargoOpt}; 5use cargo_metadata::{metadata_run, CargoOpt};
6use crossbeam_channel::{Sender, Receiver};
7use libsyntax2::SmolStr; 6use libsyntax2::SmolStr;
8 7
9use { 8use {
10 Result, 9 Result,
11 thread_watcher::{ThreadWatcher, worker_chan}, 10 thread_watcher::{Worker, ThreadWatcher},
12}; 11};
13 12
14#[derive(Debug, Clone)] 13#[derive(Debug, Clone)]
@@ -162,14 +161,15 @@ impl TargetKind {
162 } 161 }
163} 162}
164 163
165pub fn workspace_loader() -> ((Sender<PathBuf>, Receiver<Result<CargoWorkspace>>), ThreadWatcher) { 164pub fn workspace_loader() -> (Worker<PathBuf, Result<CargoWorkspace>>, ThreadWatcher) {
166 let (interface, input_receiver, output_sender) = worker_chan::<PathBuf, Result<CargoWorkspace>>(1); 165 Worker::<PathBuf, Result<CargoWorkspace>>::spawn(
167 let thread = ThreadWatcher::spawn("workspace loader", move || { 166 "workspace loader",
168 input_receiver 167 1,
169 .into_iter() 168 |input_receiver, output_sender| {
170 .map(|path| CargoWorkspace::from_cargo_metadata(path.as_path())) 169 input_receiver
171 .for_each(|it| output_sender.send(it)) 170 .into_iter()
172 }); 171 .map(|path| CargoWorkspace::from_cargo_metadata(path.as_path()))
173 172 .for_each(|it| output_sender.send(it))
174 (interface, thread) 173 }
174 )
175} 175}