1include!("generated.rs");
5
6use std::time::Duration;
7use tonic::transport::{Channel, Endpoint};
8
9#[derive(Debug, Clone)]
10pub struct ChannelConfig {
11 pub endpoint: String,
12 pub connect_timeout: Duration,
13 pub request_timeout: Duration,
14 pub concurrency_limit: usize,
15}
16
17impl ChannelConfig {
18 pub fn new(endpoint: impl Into<String>) -> Self {
19 Self {
20 endpoint: endpoint.into(),
21 connect_timeout: Duration::from_secs(3),
22 request_timeout: Duration::from_secs(10),
23 concurrency_limit: 64,
24 }
25 }
26
27 pub async fn connect(&self) -> Result<Channel, tonic::transport::Error> {
28 Endpoint::from_shared(self.endpoint.clone())?
29 .connect_timeout(self.connect_timeout)
30 .timeout(self.request_timeout)
31 .concurrency_limit(self.concurrency_limit.max(1))
32 .tcp_keepalive(Some(Duration::from_secs(30)))
33 .connect()
34 .await
35 }
36}