Skip to content

Commit 68e948d

Browse files
Exit if loading data fails
1 parent e8cd7a6 commit 68e948d

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

site/src/main.rs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use env_logger;
1111

12+
use futures::future::FutureExt;
1213
use parking_lot::RwLock;
1314
use site::{load, util};
1415
use std::env;
@@ -26,13 +27,37 @@ async fn main() {
2627
let data_ = data.clone();
2728
let fut = tokio::task::spawn(async move {
2829
*data_.write() = Some(Arc::new(
29-
load::InputData::from_fs(&util::get_repo_path().unwrap()).await.unwrap(),
30+
load::InputData::from_fs(&util::get_repo_path().unwrap())
31+
.await
32+
.unwrap(),
3033
));
31-
});
34+
})
35+
.fuse();
3236
let port = env::var("PORT")
3337
.ok()
3438
.and_then(|x| x.parse().ok())
3539
.unwrap_or(2346);
3640
println!("Starting server with port={:?}", port);
37-
futures::join!(fut, site::server::start(data, port)).0.unwrap();
41+
42+
let server = site::server::start(data, port).fuse();
43+
futures::pin_mut!(server);
44+
futures::pin_mut!(fut);
45+
loop {
46+
futures::select! {
47+
s = server => {
48+
eprintln!("Server completed unexpectedly.");
49+
return;
50+
}
51+
l = fut => {
52+
if let Err(e) = l {
53+
eprintln!("Loading failed, exiting.");
54+
if let Ok(panic) = e.try_into_panic() {
55+
std::panic::resume_unwind(panic);
56+
}
57+
} else {
58+
eprintln!("Loading complete.");
59+
}
60+
}
61+
}
62+
}
3863
}

0 commit comments

Comments
 (0)