exper.rs 1,6 КБ
Newer Older
Баринов Сергей Владимирович's avatar
Баринов Сергей Владимирович включено в состав коммита
1
2
use tonic::{transport::Channel, service::Interceptor};
use tower::ServiceBuilder;
Баринов Сергей Владимирович's avatar
Баринов Сергей Владимирович включено в состав коммита
3
4
5

use crate::generated::ydb::{discovery::{WhoAmIResponse, WhoAmIResult, ListEndpointsResponse, ListEndpointsResult}, table::{CreateSessionResponse, CreateSessionResult}};
//use ydb_grpc::ydb_proto::{discovery::{v1::discovery_service_client::DiscoveryServiceClient, WhoAmIResponse, WhoAmIResult, ListEndpointsResponse, ListEndpointsResult}, table::{CreateSessionResponse, CreateSessionResult}};
Баринов Сергей Владимирович's avatar
Баринов Сергей Владимирович включено в состав коммита
6
7
8
9
10
11






Баринов Сергей Владимирович's avatar
test    
Баринов Сергей Владимирович включено в состав коммита
12

Баринов Сергей Владимирович's avatar
Баринов Сергей Владимирович включено в состав коммита
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

#[derive(Clone, Debug)]
pub struct DBInterceptor {
    db_name: String,
    creds: String,
}


impl Interceptor for DBInterceptor {
    fn call(&mut self, mut request: tonic::Request<()>) -> Result<tonic::Request<()>, tonic::Status> {
        let headers = request.metadata_mut();
        headers.insert("x-ydb-database", self.db_name.as_str().try_into().unwrap());
        headers.insert("x-ydb-sdk-build-info", "bgg".try_into().unwrap());
        headers.insert("x-ydb-auth-ticket", self.creds.as_str().try_into().unwrap());
        Ok(request)    
    }
}


pub trait YdbResponse {
    type Payload;
    fn payload(&self) -> Option<Self::Payload>;
}


macro_rules! payloaded {
    ($x:ty , $p:ty) => {
        impl YdbResponse for $x {
            type Payload = $p;
            fn payload(&self) -> Option<Self::Payload> {
                use prost::Message;
                let bytes = self.operation.as_ref()?.result.as_ref()?.value.as_slice();
                Some(Message::decode(bytes).unwrap())
            }
        }
    }
}


payloaded!(WhoAmIResponse , WhoAmIResult);
Баринов Сергей Владимирович's avatar
Баринов Сергей Владимирович включено в состав коммита
53
54
payloaded!(ListEndpointsResponse , ListEndpointsResult);
payloaded!(CreateSessionResponse, CreateSessionResult);