Files
komp_ac/src/server/mod.rs
2025-02-17 22:23:24 +01:00

62 lines
1.9 KiB
Rust

// src/server/mod.rs
use tonic::{Request, Response, Status};
use tonic_reflection::server::Builder as ReflectionBuilder;
use crate::db;
use crate::adresar::handlers::{create_adresar, get_adresar, update_adresar}; // Import the new handler
use crate::proto::multieko2::{
AdresarRequest, AdresarResponse, GetAdresarRequest, UpdateAdresarRequest,
adresar_server::{Adresar, AdresarServer},
FILE_DESCRIPTOR_SET,
};
pub struct AdresarService {
db_pool: sqlx::PgPool,
}
#[tonic::async_trait]
impl Adresar for AdresarService {
async fn create_adresar(
&self,
request: Request<AdresarRequest>,
) -> Result<Response<AdresarResponse>, Status> {
let response = create_adresar(&self.db_pool, request.into_inner()).await?;
Ok(Response::new(response))
}
async fn get_adresar(
&self,
request: Request<GetAdresarRequest>,
) -> Result<Response<AdresarResponse>, Status> {
let response = get_adresar(&self.db_pool, request.into_inner()).await?;
Ok(Response::new(response))
}
async fn update_adresar(
&self,
request: Request<UpdateAdresarRequest>,
) -> Result<Response<AdresarResponse>, Status> {
let response = update_adresar(&self.db_pool, request.into_inner()).await?;
Ok(Response::new(response))
}
}
pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box<dyn std::error::Error>> {
let addr = "[::1]:50051".parse()?;
let adresar_service = AdresarService { db_pool: db_pool.clone() };
println!("Server listening on {}", addr);
let reflection_service = ReflectionBuilder::configure()
.register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET)
.build_v1()
.unwrap();
tonic::transport::Server::builder()
.add_service(AdresarServer::new(adresar_service))
.add_service(reflection_service)
.serve(addr)
.await?;
Ok(())
}