70 lines
3.1 KiB
Rust
70 lines
3.1 KiB
Rust
// src/services/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
|
|
};
|
|
|
|
#[derive(Clone)]
|
|
pub struct GrpcClient {
|
|
adresar_client: AdresarClient<Channel>,
|
|
table_structure_client: TableStructureServiceClient<Channel>,
|
|
table_definition_client: TableDefinitionClient<Channel>,
|
|
}
|
|
|
|
impl GrpcClient {
|
|
pub async fn new() -> Result<Self, Box<dyn std::error::Error>> {
|
|
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<u64, Box<dyn std::error::Error>> {
|
|
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<AdresarResponse, Box<dyn std::error::Error>> {
|
|
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<tonic::Response<AdresarResponse>, Box<dyn std::error::Error>> {
|
|
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<tonic::Response<AdresarResponse>, Box<dyn std::error::Error>> {
|
|
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<TableStructureResponse, Box<dyn std::error::Error>> {
|
|
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<ProfileTreeResponse, Box<dyn std::error::Error>> {
|
|
let request = tonic::Request::new(Empty::default());
|
|
let response = self.table_definition_client.get_profile_tree(request).await?;
|
|
Ok(response.into_inner())
|
|
}
|
|
}
|