Skip to content

Commit 6dff52b

Browse files
committed
Move Error into server_axum module
1 parent f749ad7 commit 6dff52b

File tree

4 files changed

+151
-148
lines changed

4 files changed

+151
-148
lines changed

ui/src/main.rs

Lines changed: 0 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#![deny(rust_2018_idioms)]
22

33
use orchestrator::coordinator::CoordinatorFactory;
4-
use snafu::prelude::*;
54
use std::{
65
net::SocketAddr,
76
path::{Path, PathBuf},
@@ -183,13 +182,6 @@ impl GhToken {
183182
fn new(token: &Option<String>) -> Self {
184183
GhToken(token.clone().map(Arc::new))
185184
}
186-
187-
fn must_get(&self) -> Result<String> {
188-
self.0
189-
.as_ref()
190-
.map(|s| String::clone(s))
191-
.context(NoGithubTokenSnafu)
192-
}
193185
}
194186

195187
#[derive(Debug, Clone)]
@@ -200,131 +192,3 @@ impl MetricsToken {
200192
MetricsToken(Arc::new(token.into()))
201193
}
202194
}
203-
204-
#[derive(Debug, Snafu)]
205-
enum Error {
206-
#[snafu(display("Gist creation failed: {}", source))]
207-
GistCreation { source: octocrab::Error },
208-
#[snafu(display("Gist loading failed: {}", source))]
209-
GistLoading { source: octocrab::Error },
210-
#[snafu(display("{PLAYGROUND_GITHUB_TOKEN} not set up for reading/writing gists"))]
211-
NoGithubToken,
212-
#[snafu(display("Unable to deserialize request: {}", source))]
213-
Deserialization { source: serde_json::Error },
214-
215-
#[snafu(transparent)]
216-
EvaluateRequest {
217-
source: server_axum::api_orchestrator_integration_impls::ParseEvaluateRequestError,
218-
},
219-
220-
#[snafu(transparent)]
221-
CompileRequest {
222-
source: server_axum::api_orchestrator_integration_impls::ParseCompileRequestError,
223-
},
224-
225-
#[snafu(transparent)]
226-
ExecuteRequest {
227-
source: server_axum::api_orchestrator_integration_impls::ParseExecuteRequestError,
228-
},
229-
230-
#[snafu(transparent)]
231-
FormatRequest {
232-
source: server_axum::api_orchestrator_integration_impls::ParseFormatRequestError,
233-
},
234-
235-
#[snafu(transparent)]
236-
ClippyRequest {
237-
source: server_axum::api_orchestrator_integration_impls::ParseClippyRequestError,
238-
},
239-
240-
#[snafu(transparent)]
241-
MiriRequest {
242-
source: server_axum::api_orchestrator_integration_impls::ParseMiriRequestError,
243-
},
244-
245-
#[snafu(transparent)]
246-
MacroExpansionRequest {
247-
source: server_axum::api_orchestrator_integration_impls::ParseMacroExpansionRequestError,
248-
},
249-
250-
#[snafu(display("The WebSocket worker panicked: {}", text))]
251-
WebSocketTaskPanic { text: String },
252-
253-
#[snafu(display("Unable to find the available crates"))]
254-
Crates {
255-
source: orchestrator::coordinator::CratesError,
256-
},
257-
258-
#[snafu(display("Unable to find the available versions"))]
259-
Versions {
260-
source: orchestrator::coordinator::VersionsError,
261-
},
262-
263-
#[snafu(display("The Miri version was missing"))]
264-
MiriVersion,
265-
266-
#[snafu(display("Unable to shutdown the coordinator"))]
267-
ShutdownCoordinator {
268-
source: orchestrator::coordinator::Error,
269-
},
270-
271-
#[snafu(display("Unable to process the evaluate request"))]
272-
Evaluate {
273-
source: orchestrator::coordinator::ExecuteError,
274-
},
275-
276-
#[snafu(display("Unable to process the compile request"))]
277-
Compile {
278-
source: orchestrator::coordinator::CompileError,
279-
},
280-
281-
#[snafu(display("Unable to process the execute request"))]
282-
Execute {
283-
source: orchestrator::coordinator::ExecuteError,
284-
},
285-
286-
#[snafu(display("Unable to process the format request"))]
287-
Format {
288-
source: orchestrator::coordinator::FormatError,
289-
},
290-
291-
#[snafu(display("Unable to process the Clippy request"))]
292-
Clippy {
293-
source: orchestrator::coordinator::ClippyError,
294-
},
295-
296-
#[snafu(display("Unable to process the Miri request"))]
297-
Miri {
298-
source: orchestrator::coordinator::MiriError,
299-
},
300-
301-
#[snafu(display("Unable to process the macro expansion request"))]
302-
MacroExpansion {
303-
source: orchestrator::coordinator::MacroExpansionError,
304-
},
305-
306-
#[snafu(display("The operation timed out"))]
307-
Timeout { source: tokio::time::error::Elapsed },
308-
309-
#[snafu(display("Unable to spawn a coordinator task"))]
310-
StreamingCoordinatorSpawn {
311-
source: server_axum::WebsocketCoordinatorManagerError,
312-
},
313-
314-
#[snafu(display("Unable to idle the coordinator"))]
315-
StreamingCoordinatorIdle {
316-
source: server_axum::WebsocketCoordinatorManagerError,
317-
},
318-
319-
#[snafu(display("Unable to perform a streaming execute"))]
320-
StreamingExecute {
321-
source: server_axum::WebsocketExecuteError,
322-
},
323-
324-
#[snafu(display("Unable to pass stdin to the active execution"))]
325-
StreamingCoordinatorExecuteStdin {
326-
source: tokio::sync::mpsc::error::SendError<()>,
327-
},
328-
}
329-
330-
type Result<T, E = Error> = ::std::result::Result<T, E>;

ui/src/metrics.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,13 @@ impl Labels {
207207
}
208208
}
209209

210-
pub(crate) async fn track_metric_no_request_async<B, Fut, Resp>(
210+
pub(crate) async fn track_metric_no_request_async<B, Fut, Resp, E>(
211211
endpoint: Endpoint,
212212
body: B,
213-
) -> crate::Result<Resp>
213+
) -> Result<Resp, E>
214214
where
215215
B: FnOnce() -> Fut,
216-
Fut: Future<Output = crate::Result<Resp>>,
216+
Fut: Future<Output = Result<Resp, E>>,
217217
{
218218
let start = Instant::now();
219219
let response = body().await;

ui/src/server_axum.rs

Lines changed: 141 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ use crate::{
55
ONE_OFF_QUEUE_DEPTH, UNAVAILABLE_WS,
66
},
77
request_database::{Handle, How},
8-
ClippySnafu, CompileSnafu, Config, CratesSnafu, Error, EvaluateSnafu, ExecuteSnafu,
9-
FormatSnafu, GhToken, GistCreationSnafu, GistLoadingSnafu, MacroExpansionSnafu, MetricsToken,
10-
MiriSnafu, MiriVersionSnafu, Result, ShutdownCoordinatorSnafu, TimeoutSnafu, VersionsSnafu,
8+
Config, GhToken, MetricsToken,
119
};
1210
use async_trait::async_trait;
1311
use axum::{
@@ -48,7 +46,7 @@ use tower_http::{
4846
};
4947
use tracing::{error, error_span, field};
5048

51-
use crate::public_http_api as api;
49+
use crate::{env::PLAYGROUND_GITHUB_TOKEN, public_http_api as api};
5250

5351
const ONE_HOUR: Duration = Duration::from_secs(60 * 60);
5452
const CORS_CACHE_TIME_TO_LIVE: Duration = ONE_HOUR;
@@ -608,11 +606,19 @@ where
608606
Ok((etag, cache_control, response))
609607
}
610608

609+
fn must_get(token: &GhToken) -> Result<String> {
610+
token
611+
.0
612+
.as_ref()
613+
.map(|s| String::clone(s))
614+
.context(NoGithubTokenSnafu)
615+
}
616+
611617
async fn meta_gist_create(
612618
Extension(token): Extension<GhToken>,
613619
Json(req): Json<api::MetaGistCreateRequest>,
614620
) -> Result<Json<api::MetaGistResponse>> {
615-
let token = token.must_get()?;
621+
let token = must_get(&token)?;
616622
gist::create_future(token, req.code)
617623
.await
618624
.map(Into::into)
@@ -624,7 +630,7 @@ async fn meta_gist_get(
624630
Extension(token): Extension<GhToken>,
625631
Path(id): Path<String>,
626632
) -> Result<Json<api::MetaGistResponse>> {
627-
let token = token.must_get()?;
633+
let token = must_get(&token)?;
628634
gist::load_future(token, &id)
629635
.await
630636
.map(Into::into)
@@ -980,6 +986,135 @@ where
980986
}
981987
}
982988

989+
#[derive(Debug, Snafu)]
990+
enum Error {
991+
#[snafu(display("Gist creation failed"))]
992+
GistCreation { source: octocrab::Error },
993+
994+
#[snafu(display("Gist loading failed"))]
995+
GistLoading { source: octocrab::Error },
996+
997+
#[snafu(display("{PLAYGROUND_GITHUB_TOKEN} not set up for reading/writing gists"))]
998+
NoGithubToken,
999+
1000+
#[snafu(display("Unable to deserialize request"))]
1001+
Deserialization { source: serde_json::Error },
1002+
1003+
#[snafu(transparent)]
1004+
EvaluateRequest {
1005+
source: api_orchestrator_integration_impls::ParseEvaluateRequestError,
1006+
},
1007+
1008+
#[snafu(transparent)]
1009+
CompileRequest {
1010+
source: api_orchestrator_integration_impls::ParseCompileRequestError,
1011+
},
1012+
1013+
#[snafu(transparent)]
1014+
ExecuteRequest {
1015+
source: api_orchestrator_integration_impls::ParseExecuteRequestError,
1016+
},
1017+
1018+
#[snafu(transparent)]
1019+
FormatRequest {
1020+
source: api_orchestrator_integration_impls::ParseFormatRequestError,
1021+
},
1022+
1023+
#[snafu(transparent)]
1024+
ClippyRequest {
1025+
source: api_orchestrator_integration_impls::ParseClippyRequestError,
1026+
},
1027+
1028+
#[snafu(transparent)]
1029+
MiriRequest {
1030+
source: api_orchestrator_integration_impls::ParseMiriRequestError,
1031+
},
1032+
1033+
#[snafu(transparent)]
1034+
MacroExpansionRequest {
1035+
source: api_orchestrator_integration_impls::ParseMacroExpansionRequestError,
1036+
},
1037+
1038+
#[snafu(display("The WebSocket worker panicked: {}", text))]
1039+
WebSocketTaskPanic { text: String },
1040+
1041+
#[snafu(display("Unable to find the available crates"))]
1042+
Crates {
1043+
source: orchestrator::coordinator::CratesError,
1044+
},
1045+
1046+
#[snafu(display("Unable to find the available versions"))]
1047+
Versions {
1048+
source: orchestrator::coordinator::VersionsError,
1049+
},
1050+
1051+
#[snafu(display("The Miri version was missing"))]
1052+
MiriVersion,
1053+
1054+
#[snafu(display("Unable to shutdown the coordinator"))]
1055+
ShutdownCoordinator {
1056+
source: orchestrator::coordinator::Error,
1057+
},
1058+
1059+
#[snafu(display("Unable to process the evaluate request"))]
1060+
Evaluate {
1061+
source: orchestrator::coordinator::ExecuteError,
1062+
},
1063+
1064+
#[snafu(display("Unable to process the compile request"))]
1065+
Compile {
1066+
source: orchestrator::coordinator::CompileError,
1067+
},
1068+
1069+
#[snafu(display("Unable to process the execute request"))]
1070+
Execute {
1071+
source: orchestrator::coordinator::ExecuteError,
1072+
},
1073+
1074+
#[snafu(display("Unable to process the format request"))]
1075+
Format {
1076+
source: orchestrator::coordinator::FormatError,
1077+
},
1078+
1079+
#[snafu(display("Unable to process the Clippy request"))]
1080+
Clippy {
1081+
source: orchestrator::coordinator::ClippyError,
1082+
},
1083+
1084+
#[snafu(display("Unable to process the Miri request"))]
1085+
Miri {
1086+
source: orchestrator::coordinator::MiriError,
1087+
},
1088+
1089+
#[snafu(display("Unable to process the macro expansion request"))]
1090+
MacroExpansion {
1091+
source: orchestrator::coordinator::MacroExpansionError,
1092+
},
1093+
1094+
#[snafu(display("The operation timed out"))]
1095+
Timeout { source: tokio::time::error::Elapsed },
1096+
1097+
#[snafu(display("Unable to spawn a coordinator task"))]
1098+
StreamingCoordinatorSpawn {
1099+
source: WebsocketCoordinatorManagerError,
1100+
},
1101+
1102+
#[snafu(display("Unable to idle the coordinator"))]
1103+
StreamingCoordinatorIdle {
1104+
source: WebsocketCoordinatorManagerError,
1105+
},
1106+
1107+
#[snafu(display("Unable to perform a streaming execute"))]
1108+
StreamingExecute { source: WebsocketExecuteError },
1109+
1110+
#[snafu(display("Unable to pass stdin to the active execution"))]
1111+
StreamingCoordinatorExecuteStdin {
1112+
source: tokio::sync::mpsc::error::SendError<()>,
1113+
},
1114+
}
1115+
1116+
type Result<T, E = Error> = ::std::result::Result<T, E>;
1117+
9831118
pub(crate) mod api_orchestrator_integration_impls {
9841119
use orchestrator::coordinator::*;
9851120
use snafu::prelude::*;

ui/src/server_axum/websocket.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ use crate::{
22
metrics::{self, record_metric, Endpoint, HasLabelsCore, Outcome},
33
request_database::{Handle, How},
44
server_axum::api_orchestrator_integration_impls::*,
5-
Error, Result, StreamingCoordinatorExecuteStdinSnafu, StreamingCoordinatorIdleSnafu,
6-
StreamingCoordinatorSpawnSnafu, StreamingExecuteSnafu, WebSocketTaskPanicSnafu,
75
};
86

97
use axum::extract::ws::{Message, WebSocket};
@@ -32,6 +30,12 @@ use tokio::{
3230
use tokio_util::sync::CancellationToken;
3331
use tracing::{error, instrument, warn, Instrument};
3432

33+
use super::{
34+
DeserializationSnafu, Error, Result, StreamingCoordinatorExecuteStdinSnafu,
35+
StreamingCoordinatorIdleSnafu, StreamingCoordinatorSpawnSnafu, StreamingExecuteSnafu,
36+
WebSocketTaskPanicSnafu,
37+
};
38+
3539
#[derive(Debug, serde::Deserialize, serde::Serialize)]
3640
#[serde(rename_all = "camelCase")]
3741
struct MetaInner {
@@ -533,7 +537,7 @@ async fn handle_msg(
533537
) {
534538
use WSMessageRequest::*;
535539

536-
let msg = serde_json::from_str(&txt).context(crate::DeserializationSnafu);
540+
let msg = serde_json::from_str(&txt).context(DeserializationSnafu);
537541

538542
match msg {
539543
Ok(ExecuteRequest { payload, meta }) => {

0 commit comments

Comments
 (0)