#![warn(missing_docs)]
use std::path::Path;
pub mod cli;
pub mod codegen;
pub mod config;
pub mod hub;
pub mod logging;
pub mod mock;
pub mod planner;
pub mod plc;
pub mod rules;
pub mod server;
pub mod service;
pub mod values;
pub mod worker;
#[cfg(test)]
mod server_tests;
#[cfg(test)]
mod testing;
pub use config::{Config, load_config};
pub use server::ServerHandle;
pub fn factory(mock: bool) -> plc::Factory {
if mock {
mock::factory().0
} else {
plc::LogixPlc::factory()
}
}
pub fn run(config_path: &Path, mock: bool) -> Result<(), String> {
let config = load_config(config_path)?;
let runtime = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.map_err(|e| e.to_string())?;
runtime.block_on(server::run(config, factory(mock)))
}