iota_network_stack/
config.rs1use std::time::Duration;
6
7use eyre::Result;
8use serde::{Deserialize, Serialize};
9use tokio_rustls::rustls::ClientConfig;
10use tonic::transport::Channel;
11
12use crate::{
13 Multiaddr,
14 client::{connect_lazy_with_config, connect_with_config},
15 metrics::{DefaultMetricsCallbackProvider, MetricsCallbackProvider},
16 server::ServerBuilder,
17};
18
19#[derive(Clone, Debug, Default, Deserialize, Serialize)]
20pub struct Config {
21 pub concurrency_limit_per_connection: Option<usize>,
23
24 pub request_timeout: Option<Duration>,
26
27 pub connect_timeout: Option<Duration>,
29
30 pub http2_initial_stream_window_size: Option<u32>,
33
34 pub http2_initial_connection_window_size: Option<u32>,
38
39 pub http2_max_concurrent_streams: Option<u32>,
43
44 pub tcp_keepalive: Option<Duration>,
52
53 pub tcp_nodelay: Option<bool>,
56
57 pub http2_keepalive_interval: Option<Duration>,
66
67 pub http2_keepalive_timeout: Option<Duration>,
74
75 pub load_shed: Option<bool>,
77
78 pub rate_limit: Option<(u64, Duration)>,
80
81 pub global_concurrency_limit: Option<usize>,
83}
84
85impl Config {
86 pub fn new() -> Self {
87 Default::default()
88 }
89
90 pub fn server_builder(&self) -> ServerBuilder {
91 ServerBuilder::from_config(self, DefaultMetricsCallbackProvider::default())
92 }
93
94 pub fn server_builder_with_metrics<M>(&self, metrics_provider: M) -> ServerBuilder<M>
95 where
96 M: MetricsCallbackProvider,
97 {
98 ServerBuilder::from_config(self, metrics_provider)
99 }
100
101 pub async fn connect(
102 &self,
103 addr: &Multiaddr,
104 tls_config: Option<ClientConfig>,
105 ) -> Result<Channel> {
106 connect_with_config(addr, tls_config, self).await
107 }
108
109 pub fn connect_lazy(
110 &self,
111 addr: &Multiaddr,
112 tls_config: Option<ClientConfig>,
113 ) -> Result<Channel> {
114 connect_lazy_with_config(addr, tls_config, self)
115 }
116
117 pub(crate) fn http_config(&self) -> iota_http::Config {
118 iota_http::Config::default()
119 .initial_stream_window_size(self.http2_initial_stream_window_size)
120 .initial_connection_window_size(self.http2_initial_connection_window_size)
121 .max_concurrent_streams(self.http2_max_concurrent_streams)
122 .http2_keepalive_timeout(self.http2_keepalive_timeout)
123 .http2_keepalive_interval(self.http2_keepalive_interval)
124 .tcp_keepalive(self.tcp_keepalive)
125 .tcp_nodelay(self.tcp_nodelay.unwrap_or_default())
126 }
127}