af-contracts 0.2.0

Generated Agent Factory Agent and Docs protobuf contracts.
Documentation
//! Generated wire contracts. Product identity and entitlements are transport
//! metadata; operation request bodies contain no caller identity.

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
    }
}