// src/tui/terminal/grpc_client.rs use tonic::transport::Channel; use common::proto::multieko2::adresar::adresar_client::AdresarClient; use common::proto::multieko2::adresar::{AdresarResponse, PostAdresarRequest, PutAdresarRequest}; use common::proto::multieko2::common::{CountResponse, PositionRequest, Empty}; use common::proto::multieko2::table_structure::table_structure_service_client::TableStructureServiceClient; use common::proto::multieko2::table_structure::TableStructureResponse; use common::proto::multieko2::table_definition::{ table_definition_client::TableDefinitionClient, ProfileTreeResponse }; pub struct GrpcClient { adresar_client: AdresarClient, table_structure_client: TableStructureServiceClient, table_definition_client: TableDefinitionClient, } impl GrpcClient { pub async fn new() -> Result> { let adresar_client = AdresarClient::connect("http://[::1]:50051").await?; let table_structure_client = TableStructureServiceClient::connect("http://[::1]:50051").await?; let table_definition_client = TableDefinitionClient::connect("http://[::1]:50051").await?; Ok(Self { adresar_client, table_structure_client, table_definition_client, }) } pub async fn get_adresar_count(&mut self) -> Result> { let request = tonic::Request::new(Empty::default()); let response: CountResponse = self.adresar_client.get_adresar_count(request).await?.into_inner(); Ok(response.count as u64) } pub async fn get_adresar_by_position(&mut self, position: u64) -> Result> { let request = tonic::Request::new(PositionRequest { position: position as i64 }); let response: AdresarResponse = self.adresar_client.get_adresar_by_position(request).await?.into_inner(); Ok(response) } pub async fn post_adresar(&mut self, request: PostAdresarRequest) -> Result, Box> { let request = tonic::Request::new(request); let response = self.adresar_client.post_adresar(request).await?; Ok(response) } pub async fn put_adresar(&mut self, request: PutAdresarRequest) -> Result, Box> { let request = tonic::Request::new(request); let response = self.adresar_client.put_adresar(request).await?; Ok(response) } pub async fn get_table_structure(&mut self) -> Result> { let request = tonic::Request::new(Empty::default()); let response = self.table_structure_client.get_adresar_table_structure(request).await?; Ok(response.into_inner()) } pub async fn get_profile_tree(&mut self) -> Result> { let request = tonic::Request::new(Empty::default()); let response = self.table_definition_client.get_profile_tree(request).await?; Ok(response.into_inner()) } }