81 lines
2.8 KiB
Rust
81 lines
2.8 KiB
Rust
mod config;
|
|
mod greeter;
|
|
mod health;
|
|
mod indexer;
|
|
mod metadata;
|
|
mod torrent;
|
|
mod torrent_manager;
|
|
|
|
mod generated {
|
|
pub mod hello {
|
|
include!("generated/hello/hello.rs");
|
|
}
|
|
|
|
pub mod torrent {
|
|
include!("generated/torrent/torrent.rs");
|
|
}
|
|
|
|
pub mod torrent_manager {
|
|
include!("generated/torrent_manager/torrent_manager.rs");
|
|
}
|
|
|
|
pub mod metadata {
|
|
include!("generated/metadata/v1/metadata.v1.rs");
|
|
}
|
|
|
|
pub mod health {
|
|
include!("generated/health/health.rs");
|
|
}
|
|
}
|
|
|
|
use std::{fs, sync::Arc};
|
|
|
|
use generated::{
|
|
health::health_server::HealthServer as AggregatorHealthServer,
|
|
hello::greeter_server::GreeterServer, metadata::metadata_service_server::MetadataServiceServer,
|
|
torrent::torrents_server::TorrentsServer,
|
|
torrent_manager::torrent_manager_server::TorrentManagerServer,
|
|
};
|
|
use greeter::GreeterService;
|
|
use health::HealthService;
|
|
use indexer::Jackett;
|
|
use metadata::MetadataService;
|
|
use tonic_health::pb::health_server::HealthServer;
|
|
use torrent::TorrentsService;
|
|
use torrent_manager::TorrentMananagerService;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
let config_str = fs::read_to_string("config.toml").expect("Failed to read file");
|
|
let config: config::Config = toml::from_str(&config_str).expect("Failed to parse TOML");
|
|
let addr = config.service.address.parse()?;
|
|
|
|
let reflection = tonic_reflection::server::Builder::configure()
|
|
.register_encoded_file_descriptor_set(generated::hello::FILE_DESCRIPTOR_SET)
|
|
.register_encoded_file_descriptor_set(generated::torrent::FILE_DESCRIPTOR_SET)
|
|
.register_encoded_file_descriptor_set(generated::health::FILE_DESCRIPTOR_SET)
|
|
.register_encoded_file_descriptor_set(generated::torrent_manager::FILE_DESCRIPTOR_SET)
|
|
.register_encoded_file_descriptor_set(generated::metadata::FILE_DESCRIPTOR_SET)
|
|
.register_encoded_file_descriptor_set(tonic_health::pb::FILE_DESCRIPTOR_SET)
|
|
.build_v1()?;
|
|
|
|
let torrents = TorrentsService::new(&config.torrent.address);
|
|
let metadata = MetadataService::new(&config.metadata.address);
|
|
let health = HealthService::new(torrents.channel(), metadata.channel());
|
|
let indexer = Arc::new(Jackett::new(&config.indexer));
|
|
let torrent_manager = TorrentMananagerService::new(torrents.clone(), indexer);
|
|
|
|
tonic::transport::Server::builder()
|
|
.add_service(reflection)
|
|
.add_service(HealthServer::new(health.clone()))
|
|
.add_service(AggregatorHealthServer::new(health))
|
|
.add_service(GreeterServer::new(GreeterService::default()))
|
|
.add_service(TorrentsServer::new(torrents))
|
|
.add_service(TorrentManagerServer::new(torrent_manager))
|
|
.add_service(MetadataServiceServer::new(metadata))
|
|
.serve(addr)
|
|
.await?;
|
|
|
|
return Ok(());
|
|
}
|