Skip to content

Commit 3f6428e

Browse files
committed
feat(server): handle errors
1 parent b3bc94b commit 3f6428e

File tree

2 files changed

+52
-32
lines changed

2 files changed

+52
-32
lines changed

src/server.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,12 @@ impl BuildServer {
154154
}
155155

156156
/// Handle Shutdown Request
157-
pub fn handle_shutdown(&self, conn: &Connection, req: &Request) -> Result<()> {
158-
conn.handle_shutdown(&req)
159-
.context("Shutdown server")
160-
.map(|_| ())?;
161-
162-
Ok(())
157+
pub fn handle_shutdown(&self, conn: &Connection, req: &Request) -> Result<bool> {
158+
if conn.handle_shutdown(&req).context("Shutdown server")? {
159+
Ok(true)
160+
} else {
161+
Ok(false)
162+
}
163163
}
164164
}
165165

src/server/bin.rs

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,48 +21,68 @@ fn main() -> Result<()> {
2121
})?;
2222

2323
for msg in &conn.receiver {
24-
match msg {
25-
Message::Request(req) => match req {
24+
if let Message::Request(ref req) = msg {
25+
match server.handle_shutdown(&conn, req) {
26+
Err(err) => tracing::error!("Failure to shutdown server {:#?}", err),
27+
Ok(should_break) => {
28+
if should_break {
29+
tracing::info!("Shutdown");
30+
break;
31+
}
32+
}
33+
};
34+
}
35+
36+
if let Err(err) = handle_message(&mut server, &conn, msg) {
37+
tracing::error!("{:?}", err);
38+
}
39+
}
40+
41+
io_threads.join()?;
42+
tracing::info!("Ended");
43+
Ok(())
44+
}
45+
46+
fn handle_message(server: &mut BuildServer, conn: &Connection, msg: Message) -> Result<()> {
47+
match msg {
48+
Message::Request(req) => {
49+
match req {
2650
Request::WorkspaceBuildTargets(id) => {
27-
server.workspace_build_targets(&conn, id)?;
51+
// WorkspaceBuildTargets
52+
server.workspace_build_targets(&conn, id)
2853
}
2954
Request::BuildTargetSources(id, value) => {
30-
server.build_target_sources(&conn, id, value)?;
55+
// BuildTargetSources
56+
server.build_target_sources(&conn, id, value)
3157
}
3258
Request::Custom(id, method, params) => match method {
3359
OptionsChangedRequest::METHOD => {
34-
server.register_for_changes(&conn, id, params.try_into()?)?;
60+
// OptionsChangedRequest
61+
server.register_for_changes(&conn, id, params.try_into()?)
3562
}
3663
OptionsRequest::METHOD => {
37-
server.sourcekit_options(&conn, id, params.try_into()?)?;
64+
// OptionsRequest
65+
server.sourcekit_options(&conn, id, params.try_into()?)
3866
}
3967
BuildTargetOutputPathsRequest::METHOD => {
40-
server.output_paths(&conn, id, params.try_into()?)?;
41-
}
42-
method => {
43-
server.default_response(&conn, &id, method, params)?;
68+
// BuildTargetOutputPathsRequest
69+
server.output_paths(&conn, id, params.try_into()?)
4470
}
71+
method => server.default_response(&conn, &id, method, params),
4572
},
46-
Request::Shutdown(_) => {
47-
server.handle_shutdown(&conn, &req)?;
48-
break;
49-
}
5073
_ => {
5174
let (id, method, params) = (req.id(), req.method(), req.params()?);
52-
server.default_response(&conn, id, method, params)?;
75+
server.default_response(&conn, id, method, params)
5376
}
54-
},
55-
56-
Message::Response(_) => {
57-
tracing::warn!("skipping \n\n{:?}\n", msg);
58-
}
59-
Message::Notification(_) => {
60-
tracing::warn!("skipping \n\n{:?}\n", msg);
6177
}
6278
}
79+
Message::Response(_) => {
80+
tracing::warn!("skipping \n\n{:?}\n", msg);
81+
Ok(())
82+
}
83+
Message::Notification(_) => {
84+
tracing::warn!("skipping \n\n{:?}\n", msg);
85+
Ok(())
86+
}
6387
}
64-
65-
io_threads.join()?;
66-
tracing::info!("Ended");
67-
Ok(())
6888
}

0 commit comments

Comments
 (0)