include!("generated.rs");
use std::time::Duration;
use tonic::transport::{Channel, Endpoint};
#[derive(Debug, Clone)]
pub struct ChannelConfig {
pub endpoint: String,
pub connect_timeout: Duration,
pub request_timeout: Duration,
pub concurrency_limit: usize,
}
impl ChannelConfig {
pub fn new(endpoint: impl Into<String>) -> Self {
Self {
endpoint: endpoint.into(),
connect_timeout: Duration::from_secs(3),
request_timeout: Duration::from_secs(10),
concurrency_limit: 64,
}
}
pub async fn connect(&self) -> Result<Channel, tonic::transport::Error> {
Endpoint::from_shared(self.endpoint.clone())?
.connect_timeout(self.connect_timeout)
.timeout(self.request_timeout)
.concurrency_limit(self.concurrency_limit.max(1))
.tcp_keepalive(Some(Duration::from_secs(30)))
.connect()
.await
}
}