aboutsummaryrefslogtreecommitdiffstats
path: root/crates/router/src/main.rs
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2025-08-12 21:05:07 +0200
committerrtkay123 <dev@kanjala.com>2025-08-12 21:05:07 +0200
commitb6924a50c9ec49e1b2b0d286abbbe608410af87d (patch)
tree9c5cf583fedfbb585985ac829bbdfdadce1571fe /crates/router/src/main.rs
parentd75b5fc9c0497f56e6b8602d8ff8991bfaeff18c (diff)
downloadwarden-b6924a50c9ec49e1b2b0d286abbbe608410af87d.tar.bz2
warden-b6924a50c9ec49e1b2b0d286abbbe608410af87d.zip
feat(router): get config
Diffstat (limited to 'crates/router/src/main.rs')
-rw-r--r--crates/router/src/main.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/crates/router/src/main.rs b/crates/router/src/main.rs
new file mode 100644
index 0000000..cc4c927
--- /dev/null
+++ b/crates/router/src/main.rs
@@ -0,0 +1,62 @@
+mod cnfg;
+mod processor;
+mod state;
+
+use anyhow::Result;
+use clap::Parser;
+use tracing::error;
+use warden_stack::{Configuration, Services, tracing::Tracing};
+
+/// warden-router
+#[derive(Parser, Debug)]
+#[command(version, about, long_about = None)]
+struct Args {
+ /// Path to config file
+ #[arg(short, long)]
+ config_file: Option<std::path::PathBuf>,
+}
+
+#[tokio::main]
+async fn main() -> Result<()> {
+ let args = Args::parse();
+ let config = include_str!("../router.toml");
+
+ let mut config = config::Config::builder()
+ .add_source(config::File::from_str(config, config::FileFormat::Toml));
+
+ if let Some(cf) = args.config_file.as_ref().and_then(|v| v.to_str()) {
+ config = config.add_source(config::File::new(cf, config::FileFormat::Toml));
+ };
+
+ let mut config: Configuration = config.build()?.try_deserialize()?;
+ config.application.name = env!("CARGO_CRATE_NAME").into();
+ config.application.version = env!("CARGO_PKG_VERSION").into();
+
+ let tracing = Tracing::builder()
+ .opentelemetry(&config.application, &config.monitoring)?
+ .loki(&config.application, &config.monitoring)?
+ .build(&config.monitoring);
+
+ let provider = tracing.otel_provider;
+
+ tokio::spawn(tracing.loki_task);
+
+ let mut services = Services::builder()
+ .nats_jetstream(&config.nats)
+ .await
+ .inspect_err(|e| error!("nats: {e}"))?
+ .build();
+
+ let jetstream = services
+ .jetstream
+ .take()
+ .ok_or_else(|| anyhow::anyhow!("jetstream is not ready"))?;
+
+ let services = state::Services {
+ jetstream,
+ };
+
+ processor::serve(services, config, provider)
+ .await
+ .inspect_err(|e| error!("{e}"))
+}