From 09828a6776c456bb44313c4f178f4ef6098d9b26 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Thu, 22 Dec 2022 16:45:08 +0100 Subject: [PATCH] Add feature to embed Lemmy for production use --- Cargo.lock | 10 ++++++++++ Cargo.toml | 5 +++++ src/main.rs | 13 ++++++++++++- src/test.rs | 3 +-- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a412612..9ede900 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2381,6 +2381,7 @@ dependencies = [ "reqwest", "rocket", "rocket_dyn_templates", + "send_wrapper", "serde", "serde_json", "serial_test", @@ -4115,6 +4116,15 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +dependencies = [ + "futures-core", +] + [[package]] name = "serde" version = "1.0.147" diff --git a/Cargo.toml b/Cargo.toml index 6297b69..2317347 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,9 @@ lto = "thin" strip = "symbols" debug = 0 +[features] +embed-lemmy = ["lemmy_server", "send_wrapper"] + [dependencies] log = "0.4.17" env_logger = { version = "0.9.1", features = ["termcolor", "humantime", "atty"], default-features = false } @@ -19,6 +22,7 @@ lemmy_api_common = { git = "https://github.com/LemmyNet/lemmy.git" } lemmy_db_schema = { git = "https://github.com/LemmyNet/lemmy.git" } lemmy_db_views = { git = "https://github.com/LemmyNet/lemmy.git" } lemmy_db_views_actor = { git = "https://github.com/LemmyNet/lemmy.git" } +lemmy_server = { git = "https://github.com/LemmyNet/lemmy.git", optional = true } once_cell = "1.15.0" anyhow = "1.0.66" rocket = { version = "0.5.0-rc.2", default-features = false } @@ -35,6 +39,7 @@ rand = "0.8.5" deser-hjson = "1.0.2" json-gettext = { version = "4.0.3", default-features = false } tokio = "1.23.0" +send_wrapper = { version = "0.6.0", features = ["futures"], optional = true } [dev-dependencies] serial_test = "0.9.0" diff --git a/src/main.rs b/src/main.rs index 3017deb..e9c4659 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,7 +45,18 @@ async fn main() -> Result<(), Error> { Env::default().default_filter_or("warn,lemmybb=debug,rocket=info,handlebars=info"), ) .init(); - let _ = init_rocket()?.launch().await?; + let rocket = init_rocket()?.launch(); + #[cfg(not(feature = "embed-lemmy"))] + let _ = rocket.await?; + #[cfg(feature = "embed-lemmy")] + { + let lemmy = send_wrapper::SendWrapper::new(lemmy_server::start_lemmy_server()); + let (frontend, backend) = tokio::join!(rocket, lemmy); + let _ = frontend.unwrap(); + if let Err(e) = backend { + log::error!("{}", e); + } + } Ok(()) } diff --git a/src/test.rs b/src/test.rs index cdefe1b..a92d539 100644 --- a/src/test.rs +++ b/src/test.rs @@ -37,8 +37,7 @@ fn random_string() -> String { async fn run_test>( test: impl Fn(asynchronous::Client, Sensitive) -> Fut, ) { - let local = LocalSet::new(); - local + LocalSet::new() .run_until(async move { let backend = spawn_local(lemmy_server::start_lemmy_server()); let rocket = init_rocket().unwrap();