Skip to main content

af_contracts/
lib.rs

1//! Generated wire contracts. Product identity and entitlements are transport
2//! metadata; operation request bodies contain no caller identity.
3
4include!("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}