1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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(())
}