mod config;
mod http;
use std::path::Path;
use std::sync::{Arc, Mutex};
use flamethrower::*;
fn main() {
#[cfg(feature = "commercial")]
{
if let Err(e) = commercial_banner() {
eprintln!("{}", e);
std::process::exit(2);
}
}
let cfg = config::Config::from_env();
let ledger = if Path::new(&cfg.ledger_path).exists() {
Ledger::load_from(&cfg.ledger_path).unwrap_or_else(|_| Ledger::new())
} else {
Ledger::new()
};
log_json(
"startup",
&format!("port={}, ledger={}", cfg.port, cfg.ledger_path),
);
let srv = http::Server::bind(
&format!("0.0.0.0:{}", cfg.port),
Arc::new(Mutex::new(ledger)),
)
.expect("bind");
if let Err(e) = srv.run() {
eprintln!("server error: {}", e);
}
}