use super::{
authenticate_connection::authenticate_connection, create_quic_endpoint::create_quic_endpoint,
create_tls_config::create_tls_config, hysteria_client::HysteriaClient,
resolve_server_address::resolve_server_address,
};
use crate::{HysteriaError, config::Config};
pub async fn connect(config: &Config) -> Result<HysteriaClient, HysteriaError> {
let remote = resolve_server_address(&config.server_addr).await?;
let client_crypto = create_tls_config(config.insecure)?;
let endpoint = create_quic_endpoint(client_crypto)?;
let conn = endpoint.connect(remote, &config.server_name)?.await?;
authenticate_connection(&conn, config).await?;
Ok(HysteriaClient {
quic_connection: conn,
})
}