diff --git a/backend-rs/.env.toml b/backend-rs/.env.toml new file mode 100644 index 0000000..a656e0d --- /dev/null +++ b/backend-rs/.env.toml @@ -0,0 +1,3 @@ +[config.app] +host = [0, 0, 0, 0] +port = 8601 diff --git a/backend-rs/Cargo.lock b/backend-rs/Cargo.lock index f297f0c..4e0b04f 100644 --- a/backend-rs/Cargo.lock +++ b/backend-rs/Cargo.lock @@ -505,6 +505,15 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-toml-merge" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6244d74ff29bd838ad4cfc9184e3f5d0011500acc8d3fb96708211d4edfb26" +dependencies = [ + "toml", +] + [[package]] name = "serde_derive" version = "1.0.196" @@ -537,6 +546,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -588,7 +606,9 @@ name = "streamfox_backend" version = "0.0.0" dependencies = [ "axum", + "serde", "tokio", + "toml-env", "tower-http", "tracing", "tracing-subscriber", @@ -611,6 +631,26 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "thread_local" version = "1.1.7" @@ -663,6 +703,52 @@ dependencies = [ "tracing", ] +[[package]] +name = "toml" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6a4b9e8023eb94392d3dca65d717c53abc5dad49c07cb65bb8fcd87115fa325" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml-env" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "529e35a3bbee7e242d6521aae0e9fce7181ea3117ded0a284405bac0b4c21f72" +dependencies = [ + "serde", + "serde-toml-merge", + "thiserror", + "toml", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" version = "0.4.13" @@ -871,3 +957,12 @@ name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5" +dependencies = [ + "memchr", +] diff --git a/backend-rs/Cargo.toml b/backend-rs/Cargo.toml index 9e2b4ae..3e6f9a7 100644 --- a/backend-rs/Cargo.toml +++ b/backend-rs/Cargo.toml @@ -5,7 +5,9 @@ edition = "2021" [dependencies] axum = "0.7.4" +serde = { version = "1.0.196", features = ["derive"] } tokio = { version = "1.36.0", features = ["rt-multi-thread"] } +toml-env = "1.1.1" tower-http = { version = "0.5.1", features = ["trace"] } tracing = "0.1.40" tracing-subscriber = "0.3.18" diff --git a/backend-rs/src/config.rs b/backend-rs/src/config.rs new file mode 100644 index 0000000..6d8f3d7 --- /dev/null +++ b/backend-rs/src/config.rs @@ -0,0 +1,22 @@ +use serde::{Deserialize, Serialize}; +use toml_env::Args; + +#[derive(Serialize, Deserialize)] +pub struct Config { + pub app: App, +} + +#[derive(Serialize, Deserialize)] +pub struct App { + pub host: [u8; 4], + pub port: u16, +} + +pub fn load() -> Config { + toml_env::initialize(Args { + config_variable_name: "config", + ..Default::default() + }) + .expect("could not initialize toml_env") + .expect("could not load config") +} diff --git a/backend-rs/src/main.rs b/backend-rs/src/main.rs index 806c4b7..aca5dc1 100644 --- a/backend-rs/src/main.rs +++ b/backend-rs/src/main.rs @@ -1,3 +1,5 @@ +mod config; + use axum::{routing, Router}; use std::net::SocketAddr; use tokio::net::TcpListener; @@ -6,6 +8,8 @@ use tracing::{info, Level}; #[tokio::main] async fn main() { + let config = config::load(); + tracing_subscriber::fmt() .with_target(false) .compact() @@ -19,7 +23,7 @@ async fn main() { .on_response(DefaultOnResponse::new().level(Level::INFO)), ); - let listener = TcpListener::bind(SocketAddr::from(([0, 0, 0, 0], 8601))) + let listener = TcpListener::bind(SocketAddr::from((config.app.host, config.app.port))) .await .expect("could not bind");