#![forbid(unsafe_code)]
#![warn(
missing_docs,
unused_extern_crates,
clippy::all,
clippy::cargo,
clippy::cast_lossless,
clippy::cast_possible_truncation,
clippy::cast_possible_wrap,
clippy::cast_precision_loss,
clippy::cast_sign_loss,
clippy::inefficient_to_string
)]
#![allow(clippy::multiple_crate_versions)]
use std::env;
use anyhow::Result;
use dbcrossbarlib::{config::Configuration, Context};
use futures::try_join;
use structopt::{self, StructOpt};
use tracing::debug;
use tracing_subscriber::{
fmt::{format::FmtSpan, Subscriber},
prelude::*,
EnvFilter,
};
mod cmd;
#[tokio::main]
async fn main() -> Result<()> {
let filter = EnvFilter::from_default_env();
Subscriber::builder()
.with_writer(std::io::stderr)
.with_span_events(FmtSpan::NEW | FmtSpan::CLOSE)
.with_env_filter(filter)
.finish()
.init();
debug!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
openssl_probe::init_ssl_cert_env_vars();
debug!("SSL_CERT_DIR: {:?}", env::var("SSL_CERT_DIR").ok());
debug!("SSL_CERT_FILE: {:?}", env::var("SSL_CERT_FILE").ok());
let opt = cmd::Opt::from_args();
debug!("{:?}", opt);
let (ctx, worker_fut) = Context::create();
let config = Configuration::try_default()?;
debug!("{:?}", config);
let cmd_fut = cmd::run(ctx, config, opt);
try_join!(cmd_fut, worker_fut)?;
Ok(())
}