1#![warn(missing_docs)]
4
5use std::path::Path;
6
7pub mod cli;
8pub mod codegen;
9pub mod config;
10pub mod hub;
11pub mod logging;
12pub mod mock;
13pub mod planner;
14pub mod plc;
15pub mod rules;
16pub mod server;
17pub mod service;
18pub mod values;
19pub mod worker;
20
21#[cfg(test)]
22mod server_tests;
23#[cfg(test)]
24mod testing;
25
26pub use config::{Config, load_config};
27pub use server::ServerHandle;
28
29pub fn factory(mock: bool) -> plc::Factory {
31 if mock {
32 mock::factory().0
33 } else {
34 plc::LogixPlc::factory()
35 }
36}
37
38pub fn run(config_path: &Path, mock: bool) -> Result<(), String> {
40 let config = load_config(config_path)?;
41 let runtime = tokio::runtime::Builder::new_multi_thread()
42 .enable_all()
43 .build()
44 .map_err(|e| e.to_string())?;
45 runtime.block_on(server::run(config, factory(mock)))
46}