blob: 69b7722f8d7e65ec58f5af3063bb7df88675f176 (
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
49
50
51
52
53
54
55
56
57
58
59
60
61
|
use tvix_store::proto::blob_service_server::BlobServiceServer;
use tvix_store::proto::directory_service_server::DirectoryServiceServer;
use tvix_store::proto::path_info_service_server::PathInfoServiceServer;
#[cfg(feature = "reflection")]
use tvix_store::proto::FILE_DESCRIPTOR_SET;
use clap::Parser;
use tonic::{transport::Server, Result};
use tracing::{info, Level};
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
struct Cli {
#[clap(long, short = 'l')]
listen_address: Option<String>,
#[clap(long)]
log_level: Option<Level>,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let cli = Cli::parse();
let listen_address = cli
.listen_address
.unwrap_or_else(|| "[::]:8000".to_string())
.parse()
.unwrap();
let level = cli.log_level.unwrap_or(Level::INFO);
let subscriber = tracing_subscriber::fmt().with_max_level(level).finish();
tracing::subscriber::set_global_default(subscriber).ok();
let mut server = Server::builder();
let blob_service = tvix_store::dummy_blob_service::DummyBlobService {};
let directory_service =
tvix_store::sled_directory_service::SledDirectoryService::new("directories.sled".into())?;
let path_info_service =
tvix_store::sled_path_info_service::SledPathInfoService::new("pathinfo.sled".into())?;
let mut router = server
.add_service(BlobServiceServer::new(blob_service))
.add_service(DirectoryServiceServer::new(directory_service))
.add_service(PathInfoServiceServer::new(path_info_service));
#[cfg(feature = "reflection")]
{
let reflection_svc = tonic_reflection::server::Builder::configure()
.register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET)
.build()?;
router = router.add_service(reflection_svc);
}
info!("tvix-store listening on {}", listen_address);
router.serve(listen_address).await?;
Ok(())
}
|