A PLC Mirror written in Rust
1use dropshot::{ConfigDropshot, ServerBuilder};
2use std::env::var;
3
4const DEFAULT_BIND: &str = "127.0.0.1:8080";
5
6#[tokio::main]
7async fn main() -> eyre::Result<()> {
8 let log = plc_mirror::create_logger()?;
9 let api = plc_mirror::create_api()?;
10
11 // make the log global and bridge to the log crate (for any other crates that use it)
12 let _scope = slog_scope::set_global_logger(log.clone());
13 slog_stdlog::init()?;
14
15 let pool = plc_mirror::connect_db().await?;
16
17 let start_after = plc_mirror::get_start_after(&pool).await?;
18
19 tokio::spawn(plc_mirror::import::importer(
20 log.clone(),
21 pool.clone(),
22 start_after,
23 ));
24
25 let bind_address = var("PLC_BIND_ADDR")
26 .unwrap_or(DEFAULT_BIND.to_string())
27 .parse()?;
28
29 let context = plc_mirror::ApiContext { pool };
30
31 let server = ServerBuilder::new(api, context, log)
32 .config(ConfigDropshot {
33 bind_address,
34 ..Default::default()
35 })
36 .start()?;
37
38 server.await.map_err(|e| eyre::Report::msg(e))
39}