diff --git a/Cargo.toml b/Cargo.toml index 86f0e07..aecded5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,3 @@ [workspace] resolver = "2" -members = ["acrate-core", "acrate-hostmeta", "acrate-nodeinfo"] +members = ["acrate-core", "acrate-hostmeta", "acrate-inbox", "acrate-nodeinfo"] diff --git a/acrate-inbox/Cargo.toml b/acrate-inbox/Cargo.toml new file mode 100644 index 0000000..cfec949 --- /dev/null +++ b/acrate-inbox/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "acrate-inbox" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.93" +axum = "0.7.7" +log = "0.4.22" +micronfig = "0.3.0" +pretty_env_logger = "0.5.0" +tokio = { version = "1.41.1", features = ["macros", "net", "rt-multi-thread"] } diff --git a/acrate-inbox/src/config.rs b/acrate-inbox/src/config.rs new file mode 100644 index 0000000..63babb0 --- /dev/null +++ b/acrate-inbox/src/config.rs @@ -0,0 +1,3 @@ +micronfig::config!( + ACRATE_INBOX_BIND_ADDRESS: String, +); diff --git a/acrate-inbox/src/main.rs b/acrate-inbox/src/main.rs new file mode 100644 index 0000000..ee14d9a --- /dev/null +++ b/acrate-inbox/src/main.rs @@ -0,0 +1,29 @@ +use anyhow::Context; + +mod config; + + +#[tokio::main] +async fn main() -> anyhow::Result { + pretty_env_logger::init(); + log::debug!("Logging initialized!"); + + log::trace!("Creating Axum router..."); + let app = axum::Router::new(); + log::trace!("Axum router created successfully!"); + + log::trace!("Creating Tokio listener..."); + let bind_address = config::ACRATE_INBOX_BIND_ADDRESS(); + let listener = tokio::net::TcpListener::bind(bind_address) + .await + .context("failed to bind listener to address")?; + log::trace!("Tokio listener bound to: {bind_address}"); + + log::debug!("Starting server..."); + axum::serve(listener, app) + .await + .context("server exited with error")?; + + log::error!("Server exited with no error, panicking."); + panic!("server exited with no error"); +}