ic_agent/agent/agent_config.rs
1use reqwest::Client;
2use url::Url;
3
4use crate::{
5 agent::{NonceFactory, NonceGenerator},
6 identity::{anonymous::AnonymousIdentity, Identity},
7};
8use std::{sync::Arc, time::Duration};
9
10use super::{route_provider::RouteProvider, HttpService};
11
12/// A configuration for an agent.
13#[non_exhaustive]
14pub struct AgentConfig {
15 /// See [`with_nonce_factory`](super::AgentBuilder::with_nonce_factory).
16 pub nonce_factory: Arc<dyn NonceGenerator>,
17 /// See [`with_identity`](super::AgentBuilder::with_identity).
18 pub identity: Arc<dyn Identity>,
19 /// See [`with_ingress_expiry`](super::AgentBuilder::with_ingress_expiry).
20 pub ingress_expiry: Duration,
21 /// See [`with_http_client`](super::AgentBuilder::with_http_client).
22 pub client: Option<Client>,
23 /// See [`with_route_provider`](super::AgentBuilder::with_route_provider).
24 pub route_provider: Option<Arc<dyn RouteProvider>>,
25 /// See [`verify_query_signatures`](super::AgentBuilder::with_verify_query_signatures).
26 pub verify_query_signatures: bool,
27 /// See [`with_max_concurrent_requests`](super::AgentBuilder::with_max_concurrent_requests).
28 pub max_concurrent_requests: usize,
29 /// See [`with_max_response_body_size`](super::AgentBuilder::with_max_response_body_size).
30 pub max_response_body_size: Option<usize>,
31 /// See [`with_max_tcp_error_retries`](super::AgentBuilder::with_max_tcp_error_retries).
32 pub max_tcp_error_retries: usize,
33 /// See [`with_arc_http_middleware`](super::AgentBuilder::with_arc_http_middleware).
34 pub http_service: Option<Arc<dyn HttpService>>,
35 /// See [`with_max_polling_time`](super::AgentBuilder::with_max_polling_time).
36 pub max_polling_time: Duration,
37 /// See [`with_background_dynamic_routing`](super::AgentBuilder::with_background_dynamic_routing).
38 pub background_dynamic_routing: bool,
39 /// See [`with_url`](super::AgentBuilder::with_url).
40 pub url: Option<Url>,
41}
42
43impl Default for AgentConfig {
44 fn default() -> Self {
45 Self {
46 nonce_factory: Arc::new(NonceFactory::random()),
47 identity: Arc::new(AnonymousIdentity {}),
48 ingress_expiry: Duration::from_secs(3 * 60),
49 client: None,
50 http_service: None,
51 verify_query_signatures: true,
52 max_concurrent_requests: 50,
53 route_provider: None,
54 max_response_body_size: None,
55 max_tcp_error_retries: 0,
56 max_polling_time: Duration::from_secs(60 * 5),
57 background_dynamic_routing: false,
58 url: None,
59 }
60 }
61}