// 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, ) -> Result, Status> { let response = create_adresar(&self.db_pool, request.into_inner()).await?; Ok(Response::new(response)) } async fn get_adresar( &self, request: Request, ) -> Result, Status> { let response = get_adresar(&self.db_pool, request.into_inner()).await?; Ok(Response::new(response)) } async fn update_adresar( &self, request: Request, ) -> Result, 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> { 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(()) }