network_protocol/utils/
timeout.rs1use crate::error::{ProtocolError, Result};
2use std::time::Duration;
3use tokio::time;
4
5pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(5);
7
8pub const HANDSHAKE_TIMEOUT: Duration = Duration::from_secs(10);
10
11pub const SHUTDOWN_TIMEOUT: Duration = Duration::from_secs(30);
13
14pub const KEEPALIVE_INTERVAL: Duration = Duration::from_secs(15);
16
17pub const DEAD_CONNECTION_TIMEOUT: Duration = Duration::from_secs(60);
19
20pub async fn with_timeout<T>(
25 operation: impl std::future::Future<Output = T>,
26 duration: Duration,
27) -> std::result::Result<T, time::error::Elapsed> {
28 time::timeout(duration, operation).await
29}
30
31pub async fn with_timeout_error<T>(
36 operation: impl std::future::Future<Output = Result<T>>,
37 duration: Duration,
38) -> Result<T> {
39 match time::timeout(duration, operation).await {
40 Ok(result) => result,
41 Err(_) => Err(ProtocolError::Timeout),
42 }
43}