aws_smithy_http_server/
settings.rs1use std::{sync::Arc, time::Duration};
13
14use hyper_util::{
15 rt::{TokioExecutor, TokioTimer},
16 server::conn::auto::Builder,
17};
18
19pub const DEFAULT_NON_PAYLOAD_REQUEST_BODY_READ_TIMEOUT: Duration = Duration::from_secs(5 * 60);
21
22pub const DEFAULT_PAYLOAD_REQUEST_BODY_READ_TIMEOUT: Duration = Duration::from_secs(60 * 60);
24
25pub const DEFAULT_REQUEST_BODY_READ_POLL_BUDGET: usize = 32;
27
28pub const DEFAULT_EVENT_STREAM_INITIAL_MESSAGE_TIMEOUT: Option<Duration> = None;
30
31pub const DEFAULT_EVENT_STREAM_MESSAGE_COMPLETION_TIMEOUT: Option<Duration> = None;
33
34pub const DEFAULT_EVENT_STREAM_IDLE_TIMEOUT: Option<Duration> = None;
36
37pub const DEFAULT_REQUEST_BODY_MAX_BYTES: usize = 0;
39
40#[derive(Debug, Clone, Copy)]
42pub(crate) struct RequestBodyReadTimeoutConfig {
43 pub(crate) timeout: Duration,
44 pub(crate) operation: &'static str,
45}
46
47impl RequestBodyReadTimeoutConfig {
48 pub(crate) fn new(timeout: Duration, operation: &'static str) -> Option<Self> {
49 (!timeout.is_zero()).then_some(Self { timeout, operation })
50 }
51
52 pub(crate) fn default_for_operation(payload: bool, operation: &'static str) -> Option<Self> {
53 let timeout = if payload {
54 DEFAULT_PAYLOAD_REQUEST_BODY_READ_TIMEOUT
55 } else {
56 DEFAULT_NON_PAYLOAD_REQUEST_BODY_READ_TIMEOUT
57 };
58 Self::new(timeout, operation)
59 }
60}
61
62pub const DEFAULT_MAX_CONNECTIONS: usize = 16_384;
64
65pub const DEFAULT_HEADER_READ_TIMEOUT: Duration = Duration::from_secs(60);
67
68pub const DEFAULT_HTTP2_KEEP_ALIVE_INTERVAL: Duration = Duration::from_secs(20);
70
71pub const DEFAULT_HTTP2_KEEP_ALIVE_TIMEOUT: Duration = Duration::from_secs(20);
73
74pub const DEFAULT_SHUTDOWN_TIMEOUT: Option<Duration> = None;
76
77pub(crate) fn default_connection_builder() -> Builder<TokioExecutor> {
79 let mut builder = Builder::new(TokioExecutor::new());
80 builder
81 .http2()
82 .timer(TokioTimer::new())
83 .keep_alive_interval(Some(DEFAULT_HTTP2_KEEP_ALIVE_INTERVAL))
84 .keep_alive_timeout(DEFAULT_HTTP2_KEEP_ALIVE_TIMEOUT);
85 builder
86}
87
88pub(crate) struct ServeSettings {
90 pub(crate) hyper_builder: Option<Arc<Builder<TokioExecutor>>>,
91 pub(crate) max_connections: Option<usize>,
92 pub(crate) header_read_timeout: Option<Duration>,
93 pub(crate) shutdown_timeout: Option<Duration>,
94}
95
96impl Default for ServeSettings {
97 fn default() -> Self {
98 Self {
99 hyper_builder: None,
100 max_connections: Some(DEFAULT_MAX_CONNECTIONS),
101 header_read_timeout: Some(DEFAULT_HEADER_READ_TIMEOUT),
102 shutdown_timeout: DEFAULT_SHUTDOWN_TIMEOUT,
103 }
104 }
105}