Files
music-agregator/src/main.rs
T
2026-07-12 16:52:33 +02:00

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(());
}