#![warn(missing_docs)]
use std::{net::SocketAddr, path::PathBuf};
use clap::Parser;
use remotecache::{error::Result, persistent::server::Server};
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
pub struct Args {
#[clap(short, long, value_name = "ENDPOINT")]
pub local: Option<SocketAddr>,
#[clap(short, long, value_name = "ENDPOINT")]
pub remote: Option<SocketAddr>,
#[clap(value_parser, value_hint = clap::ValueHint::DirPath)]
pub root: PathBuf,
}
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt::init();
let args = Args::parse();
let mut builder = Server::builder();
builder = builder.root(args.root);
if let Some(remote) = args.remote {
builder = builder.remote(remote).await?;
}
if let Some(local) = args.local {
builder = builder.local(local).await?;
}
let server = builder.build();
server.start().await?;
Ok(())
}