feat(tvix/store): initial dummy implementation

This replaces the hello world example from tvix-store with an actual
gRPC endpoint, implementing all of BlobService, DirectoryService and
PathInfoService.

All RPC methods currently respond with the unimplemented gRPC status.

Co-Authored-By: Márton Boros <martonboros@gmail.com>
Change-Id: Ieba333cca44dc1e3f2ffbe676ba7a99e672b9bfb
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7664
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
This commit is contained in:
Florian Klink 2022-12-28 16:40:28 +01:00 committed by flokli
parent d22a9c8610
commit 58f5ff2c17
7 changed files with 175 additions and 22 deletions

View file

@ -1,3 +1,13 @@
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;
@ -5,6 +15,34 @@ mod proto;
#[cfg(test)]
mod tests;
fn main() {
println!("Hello, world!");
#[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(())
}