ydb 0.10.2

Crate contains generated low-level grpc code from YDB API protobuf, used as base for ydb crate
Documentation
use crate::grpc_wrapper::grpc::grpc_read_operation_result;
use crate::grpc_wrapper::raw_services::{GrpcServiceForDiscovery, Service};
use crate::grpc_wrapper::runtime_interceptors::InterceptedChannel;
use crate::YdbResult;
use itertools::Itertools;
use ydb_grpc::ydb_proto::discovery::v1::discovery_service_client::DiscoveryServiceClient;
use ydb_grpc::ydb_proto::discovery::{ListEndpointsRequest, ListEndpointsResult};

pub struct GrpcDiscoveryClient {
    service: DiscoveryServiceClient<InterceptedChannel>,
}

impl GrpcDiscoveryClient {
    pub(crate) fn new(channel: InterceptedChannel) -> Self {
        Self {
            service: DiscoveryServiceClient::new(channel),
        }
    }

    #[tracing::instrument(skip(self))]
    pub(crate) async fn list_endpoints(
        &mut self,
        database: String,
    ) -> YdbResult<Vec<EndpointInfo>> {
        let req = ListEndpointsRequest {
            database,
            ..ListEndpointsRequest::default()
        };
        let resp = self.service.list_endpoints(req).await?;
        let result: ListEndpointsResult = grpc_read_operation_result(resp)?;

        let res = result
            .endpoints
            .into_iter()
            .map(|item| EndpointInfo {
                fqdn: item.address,
                port: item.port,
                ssl: item.ssl,
                location: item.location,
            })
            .collect_vec();
        Ok(res)
    }
}

pub(crate) struct EndpointInfo {
    pub(crate) fqdn: String,
    pub(crate) port: u32,
    pub(crate) ssl: bool,
    pub(crate) location: String,
}

impl GrpcServiceForDiscovery for GrpcDiscoveryClient {
    fn get_grpc_discovery_service() -> Service {
        Service::Discovery
    }
}