use std::sync::Arc;
use std::time::Duration;
use crate::base::generated::steam_language::EUniverse;
use crate::networking::steam3::protocol_type::ProtocolTypes;
use crate::steam::discovery::i_server_list_provider::IServerListProvider;
use super::i_machine_info_provider::IMachineInfoProvider;
use super::steam_configuration::HttpClientFactory;
use super::steam_configuration_state::PersonaStateFlags;
pub trait ISteamConfigurationBuilder {
fn with_cell_id(&mut self, cell_id: u32) -> &mut Self;
fn with_connection_timeout(&mut self, connection_timeout: Duration) -> &mut Self;
fn with_default_persona_state_flags(&mut self, persona_state_flags: PersonaStateFlags) -> &mut Self;
fn with_directory_fetch(&mut self, allow_directory_fetch: bool) -> &mut Self;
fn with_http_client_factory(&mut self, factory_function: HttpClientFactory) -> &mut Self;
fn with_machine_info_provider(&mut self, machine_info_provider: Arc<dyn IMachineInfoProvider>) -> &mut Self;
fn with_protocol_types(&mut self, protocol_types: ProtocolTypes) -> &mut Self;
fn with_server_list_provider(&mut self, provider: Arc<dyn IServerListProvider>) -> &mut Self;
fn with_universe(&mut self, universe: EUniverse) -> &mut Self;
fn with_web_api_base_address(&mut self, base_address: reqwest::Url) -> &mut Self;
fn with_web_api_key(&mut self, web_api_key: String) -> &mut Self;
}