use crate::error::{ProtocolError, Result};
use std::time::Duration;
use tokio::time;
pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(5);
pub const HANDSHAKE_TIMEOUT: Duration = Duration::from_secs(10);
pub const SHUTDOWN_TIMEOUT: Duration = Duration::from_secs(30);
pub const KEEPALIVE_INTERVAL: Duration = Duration::from_secs(15);
pub const DEAD_CONNECTION_TIMEOUT: Duration = Duration::from_secs(60);
pub async fn with_timeout<T>(
operation: impl std::future::Future<Output = T>,
duration: Duration,
) -> std::result::Result<T, time::error::Elapsed> {
time::timeout(duration, operation).await
}
pub async fn with_timeout_error<T>(
operation: impl std::future::Future<Output = Result<T>>,
duration: Duration,
) -> Result<T> {
match time::timeout(duration, operation).await {
Ok(result) => result,
Err(_) => Err(ProtocolError::Timeout),
}
}