use crate::error::SimError;
#[non_exhaustive]
pub enum SimType {
#[cfg(feature = "iracing")]
IRacing,
#[cfg(feature = "ac-evo")]
AcEvo,
#[cfg(feature = "lmu")]
Lmu,
}
#[non_exhaustive]
pub enum Connection {
#[cfg(feature = "iracing")]
IRacing(Box<crate::iracing::connection::IRsdkConnection>),
#[cfg(feature = "ac-evo")]
AcEvo(crate::ac_evo::connection::AcEvoConnection),
#[cfg(feature = "lmu")]
Lmu(crate::lmu::connection::LmuConnection),
}
pub struct SimConnection;
impl SimConnection {
pub fn connect() -> Result<Connection, SimError> {
#[cfg(feature = "iracing")]
{
if let Ok(c) = crate::iracing::connection::IRsdkConnection::connect() {
return Ok(Connection::IRacing(Box::new(c)));
}
}
#[cfg(feature = "ac-evo")]
if let Ok(c) = crate::ac_evo::connection::AcEvoConnection::connect() {
return Ok(Connection::AcEvo(c));
}
#[cfg(feature = "lmu")]
if let Ok(c) = crate::lmu::connection::LmuConnection::connect() {
return Ok(Connection::Lmu(c));
}
Err(SimError::NoSimRunning)
}
pub fn connect_to(sim: SimType) -> Result<Connection, SimError> {
match sim {
#[cfg(feature = "iracing")]
SimType::IRacing => crate::iracing::connection::IRsdkConnection::connect()
.map(|c| Connection::IRacing(Box::new(c))),
#[cfg(feature = "ac-evo")]
SimType::AcEvo => {
crate::ac_evo::connection::AcEvoConnection::connect().map(Connection::AcEvo)
}
#[cfg(feature = "lmu")]
SimType::Lmu => crate::lmu::connection::LmuConnection::connect().map(Connection::Lmu),
}
}
}