about summary refs log tree commit diff
path: root/tvix/store/src/main.rs
blob: cc9002438bceda0015a94be963b14c7df513e503 (plain) (blame)
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::proto::blob_service_server::BlobServiceServer;
use crate::proto::directory_service_server::DirectoryServiceServer;
use crate::proto::path_info_service_server::PathInfoServiceServer;

use clap::Parser;
use tonic::{transport::Server, Result};

mod dummy_blob_service;
mod dummy_directory_service;
mod dummy_path_info_service;
mod nixbase32;
mod nixpath;
mod proto;

#[cfg(test)]
mod tests;

#[derive(Parser)]
#[command(author, version, about, long_about = None)]
struct Cli {
    #[clap(long, short = 'l')]
    listen_address: Option<String>,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let cli = Cli::parse();
    let listen_address = cli
        .listen_address
        .unwrap_or("[::]:8000".to_string())
        .parse()
        .unwrap();

    let blob_service = dummy_blob_service::DummyBlobService {};
    let directory_service = dummy_directory_service::DummyDirectoryService {};
    let path_info_service = dummy_path_info_service::DummyPathInfoService {};

    println!("tvix-store listening on {}", listen_address);

    Server::builder()
        .add_service(BlobServiceServer::new(blob_service))
        .add_service(DirectoryServiceServer::new(directory_service))
        .add_service(PathInfoServiceServer::new(path_info_service))
        .serve(listen_address)
        .await?;

    Ok(())
}