use anyhow::Result;
use clap::Clap;
use guppy_grpc::grpc_controller::{
    connect_to_arm, GuppyConfigHandler, GuppyConfigureServer, GuppyControllerHandler,
    GuppyControllerServer,
};
use std::sync::Arc;
use tonic::transport::Server;
#[derive(Clap)]
struct Args {
    #[clap(about = "Serial port to use")]
    port: String,
}
#[tokio::main]
async fn main() -> Result<()> {
    let args = Args::parse();
    let address = "0.0.0.0:5002".parse().unwrap();
    let driver = connect_to_arm(&args.port).await?;
    let config_handler = GuppyConfigHandler::new(Arc::clone(&driver));
    let controller_handler = GuppyControllerHandler::new(driver);
    println!("Starting service at {}", address);
    Server::builder()
        .add_service(GuppyConfigureServer::new(config_handler))
        .add_service(GuppyControllerServer::new(controller_handler))
        .serve(address)
        .await?;
    Ok(())
}