Skip to main content

a2a_client/
lib.rs

1// Copyright AGNTCY Contributors (https://github.com/agntcy)
2// SPDX-License-Identifier: Apache-2.0
3pub mod agent_card;
4pub mod auth;
5pub mod client;
6pub mod factory;
7pub mod jsonrpc;
8pub mod middleware;
9mod push_config_compat;
10pub mod rest;
11pub mod transport;
12
13pub use client::A2AClient;
14pub use factory::A2AClientFactory;
15pub use futures::stream::BoxStream;
16pub use transport::{ServiceParams, Transport, TransportFactory};
17
18pub(crate) fn build_reqwest_client_with_root_pem(
19    pem: &[u8],
20) -> Result<reqwest::Client, a2a::A2AError> {
21    let cert = reqwest::Certificate::from_pem(pem)
22        .map_err(|e| a2a::A2AError::internal(format!("invalid PEM certificate: {e}")))?;
23    reqwest::Client::builder()
24        .add_root_certificate(cert)
25        .build()
26        .map_err(|e| a2a::A2AError::internal(format!("failed to build HTTP client: {e}")))
27}
28
29#[cfg(test)]
30pub(crate) mod test_utils {
31    pub fn rcgen_self_signed_ca_pem() -> Vec<u8> {
32        let mut params = rcgen::CertificateParams::new(Vec::<String>::new()).unwrap();
33        params.is_ca = rcgen::IsCa::Ca(rcgen::BasicConstraints::Unconstrained);
34        params
35            .distinguished_name
36            .push(rcgen::DnType::CommonName, "Test CA");
37        let key = rcgen::KeyPair::generate().unwrap();
38        let cert = params.self_signed(&key).unwrap();
39        cert.pem().into_bytes()
40    }
41}