use std::time::Duration;
use tokio::time::{timeout, Timeout};
pub fn with_timeout<F>(future: F, duration: Duration) -> Timeout<F>
where
F: std::future::Future,
{
timeout(duration, future)
}
pub const DEFAULT_NETWORK_TIMEOUT: Duration = Duration::from_secs(30);
pub const DEFAULT_STORAGE_TIMEOUT: Duration = Duration::from_secs(10);
pub const DEFAULT_RPC_TIMEOUT: Duration = Duration::from_secs(60);
pub async fn with_network_timeout<F, T>(operation: F) -> Result<T, tokio::time::error::Elapsed>
where
F: std::future::Future<Output = T>,
{
timeout(DEFAULT_NETWORK_TIMEOUT, operation).await
}
pub async fn with_storage_timeout<F, T>(operation: F) -> Result<T, tokio::time::error::Elapsed>
where
F: std::future::Future<Output = T>,
{
timeout(DEFAULT_STORAGE_TIMEOUT, operation).await
}
pub async fn with_rpc_timeout<F, T>(operation: F) -> Result<T, tokio::time::error::Elapsed>
where
F: std::future::Future<Output = T>,
{
timeout(DEFAULT_RPC_TIMEOUT, operation).await
}
pub async fn with_custom_timeout<F, T>(
operation: F,
duration: Duration,
) -> Result<T, tokio::time::error::Elapsed>
where
F: std::future::Future<Output = T>,
{
timeout(duration, operation).await
}
#[inline]
pub fn storage_timeout_from_config(
config: Option<&crate::config::RequestTimeoutConfig>,
) -> Duration {
config
.map(|c| Duration::from_secs(c.storage_timeout_seconds))
.unwrap_or(DEFAULT_STORAGE_TIMEOUT)
}
#[inline]
pub fn network_timeout_from_config(
config: Option<&crate::config::RequestTimeoutConfig>,
) -> Duration {
config
.map(|c| Duration::from_secs(c.network_timeout_seconds))
.unwrap_or(DEFAULT_NETWORK_TIMEOUT)
}
#[inline]
pub fn rpc_timeout_from_config(config: Option<&crate::config::RequestTimeoutConfig>) -> Duration {
config
.map(|c| Duration::from_secs(c.rpc_timeout_seconds))
.unwrap_or(DEFAULT_RPC_TIMEOUT)
}
#[inline]
pub fn handshake_timeout_from_config(
config: Option<&crate::config::RequestTimeoutConfig>,
) -> Duration {
config
.map(|c| Duration::from_secs(c.handshake_timeout_secs))
.unwrap_or(Duration::from_secs(10))
}
#[inline]
pub fn checkpoint_timeout_from_config(
config: Option<&crate::config::RequestTimeoutConfig>,
) -> Duration {
config
.map(|c| Duration::from_secs(c.checkpoint_request_timeout_secs))
.unwrap_or(Duration::from_secs(5))
}
#[inline]
pub fn protocol_verify_timeout_from_config(
config: Option<&crate::config::RequestTimeoutConfig>,
) -> Duration {
config
.map(|c| Duration::from_secs(c.protocol_verify_timeout_secs))
.unwrap_or(Duration::from_secs(5))
}
#[inline]
pub fn headers_verify_timeout_from_config(
config: Option<&crate::config::RequestTimeoutConfig>,
) -> Duration {
config
.map(|c| Duration::from_secs(c.headers_verify_timeout_secs))
.unwrap_or(Duration::from_secs(10))
}
#[inline]
pub fn lan_security_timeouts_from_config(
config: Option<&crate::config::RequestTimeoutConfig>,
) -> (Duration, Duration) {
let proto = protocol_verify_timeout_from_config(config);
let headers = headers_verify_timeout_from_config(config);
(proto, headers)
}