ydb/client_scheme/
client.rs

1use crate::client::TimeoutSettings;
2use crate::client_scheme::list_types::SchemeEntry;
3use crate::grpc_connection_manager::GrpcConnectionManager;
4use crate::grpc_wrapper::raw_scheme_client::client::{
5    RawMakeDirectoryRequest, RawRemoveDirectoryRequest,
6};
7use crate::grpc_wrapper::raw_scheme_client::list_directory_types::RawListDirectoryRequest;
8use crate::{grpc_wrapper, YdbResult};
9
10#[derive(Clone)]
11pub struct SchemeClient {
12    timeouts: TimeoutSettings,
13    connection_manager: GrpcConnectionManager,
14}
15
16impl SchemeClient {
17    pub(crate) fn new(
18        timeouts: TimeoutSettings,
19        connection_manager: GrpcConnectionManager,
20    ) -> Self {
21        Self {
22            timeouts,
23            connection_manager,
24        }
25    }
26
27    pub async fn make_directory(&mut self, path: String) -> YdbResult<()> {
28        let req = RawMakeDirectoryRequest {
29            operation_params: self.timeouts.operation_params(),
30            path,
31        };
32        let mut service = self.connection().await?;
33        service.make_directory(req).await?;
34        Ok(())
35    }
36
37    pub async fn list_directory(&mut self, path: String) -> YdbResult<Vec<SchemeEntry>> {
38        let req = RawListDirectoryRequest {
39            operation_params: self.timeouts.operation_params(),
40            path,
41        };
42
43        let mut service = self.connection().await?;
44        let res = service.list_directory(req).await?;
45
46        Ok(res.children.into_iter().collect())
47    }
48
49    pub async fn remove_directory(&mut self, path: String) -> YdbResult<()> {
50        let req = RawRemoveDirectoryRequest {
51            operation_params: self.timeouts.operation_params(),
52            path,
53        };
54        let mut service = self.connection().await?;
55        service.remove_directory(req).await?;
56        Ok(())
57    }
58
59    async fn connection(
60        &self,
61    ) -> YdbResult<grpc_wrapper::raw_scheme_client::client::RawSchemeClient> {
62        self.connection_manager
63            .get_auth_service(grpc_wrapper::raw_scheme_client::client::RawSchemeClient::new)
64            .await
65    }
66}