use std::time::Duration;
use tokio_tungstenite::tungstenite::{client::IntoClientRequest, http};
use url::Url;
use crate::Error;
#[derive(Clone, Debug)]
pub struct ConnectOptions {
pub extra_headers: http::HeaderMap,
pub keepalive_interval: Option<Duration>,
pub custom_keepalive_message: Option<String>,
}
impl Default for ConnectOptions {
fn default() -> Self {
Self {
extra_headers: http::HeaderMap::new(),
keepalive_interval: Some(Duration::from_secs(2)),
custom_keepalive_message: None,
}
}
}
impl ConnectOptions {
pub(crate) fn build_request(&self, url: &Url) -> Result<http::Request<()>, Error> {
let mut request = url
.as_str()
.into_client_request()
.map_err(Error::WebsocketError)?;
for (key, value) in &self.extra_headers {
request.headers_mut().insert(key, value.clone());
}
Ok(request)
}
}