maps-service/validation/src/main.rs

49 lines
1.4 KiB
Rust
Raw Normal View History

2024-12-03 05:09:59 +00:00
mod nats_types;
2024-12-03 05:15:10 +00:00
mod validator;
mod publish_new;
mod publish_fix;
2024-11-26 01:30:55 +00:00
2024-12-03 06:09:01 +00:00
#[allow(dead_code)]
#[derive(Debug)]
enum StartupError{
API(api::ReqwestError),
2024-12-03 06:09:01 +00:00
Connect(async_nats::ConnectError),
Subscribe(async_nats::SubscribeError),
}
2024-12-03 06:52:01 +00:00
impl std::fmt::Display for StartupError{
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
write!(f,"{self:?}")
}
}
impl std::error::Error for StartupError{}
2024-12-03 06:09:01 +00:00
2024-12-03 05:15:10 +00:00
#[tokio::main]
2024-12-03 06:09:01 +00:00
async fn main()->Result<(),StartupError>{
2024-12-03 07:34:08 +00:00
// talk to roblox
2024-12-03 06:52:01 +00:00
let cookie_context=rbx_asset::cookie::CookieContext::new(rbx_asset::cookie::Cookie::new("".to_owned()));
// maps-service api
let api=api::Context::new("https:://localhost:1234/v1".to_owned()).map_err(StartupError::API)?;
2024-12-03 06:52:01 +00:00
// nats
2024-12-03 06:09:01 +00:00
let nasty=async_nats::connect("nats").await.map_err(StartupError::Connect)?;
2024-12-03 06:52:01 +00:00
// connect to nats
let (publish_new,publish_fix,validator)=tokio::try_join!(
publish_new::Publisher::new(nasty.clone(),cookie_context.clone()),
publish_fix::Publisher::new(nasty.clone(),cookie_context.clone()),
// clone nats here because it's dropped within the function scope,
// meanining the last reference is dropped...
validator::Validator::new(nasty.clone(),cookie_context,api)
2024-12-03 06:09:01 +00:00
).map_err(StartupError::Subscribe)?;
2024-12-03 06:52:01 +00:00
// publisher threads
tokio::spawn(publish_new.run());
tokio::spawn(publish_fix.run());
2024-12-03 06:52:01 +00:00
2024-12-03 06:09:01 +00:00
// run validator on the main thread indefinitely
validator.run().await;
2024-12-03 06:52:01 +00:00
2024-12-03 06:09:01 +00:00
Ok(())
2024-11-26 01:30:55 +00:00
}