Documentation
use std::net::SocketAddr;

use aok::Void;

#[cfg(feature = "grpc")]
mod grpc;

#[cfg(feature = "grpc")]
pub use grpc::grpc;

pub async fn init() -> Void {
  log_init::init();
  static_::init().await
}

pub fn env_addr(name: &str, default: u16) -> SocketAddr {
  macro_rules! default {
    () => {
      SocketAddr::from(([0, 0, 0, 0], default))
    };
  }
  let addr = if let Ok(addr) = std::env::var(name) {
    match addr.parse() {
      Ok(addr) => addr,
      Err(err) => {
        log::error!("{name}={addr} ADDR PARSE ERROR: {err}");
        default!()
      }
    }
  } else {
    default!()
  };
  log::info!("{name} {addr}");
  addr
}