pub(crate) mod consts; pub(crate) mod server; pub(crate) mod worker; use std::{net::ToSocketAddrs, str::FromStr}; use clap::Parser; use libvanity::{ vanity::vanity_service_server::VanityServiceServer, worker::worker_server::WorkerServer, }; pub use libvanity; #[derive(Parser)] struct Args { #[clap(short, long, default_value = "127.0.0.1:8877")] bind_address: String, #[clap(short, long, default_value = "redis://127.0.0.1:6379")] redis_address: String, #[clap(short, long, default_value = "INFO")] log_level: String, } #[tokio::main] async fn main() -> Result<(), Box> { let args = Args::parse(); let level = tracing::Level::from_str(&args.log_level)?; tracing_subscriber::FmtSubscriber::builder() .with_max_level(level) .init(); let redis = redis::Client::open(args.redis_address)?; let vanity_server = server::VanityService::new(redis.clone()); let worker_server = worker::WorkerService::new(redis.clone()); tonic::transport::Server::builder() .add_service(VanityServiceServer::new(vanity_server)) .add_service(WorkerServer::new(worker_server)) .serve(args.bind_address.to_socket_addrs()?.next().unwrap()) .await?; Ok(()) }