pub mod betting;
pub mod cash;
pub mod margin;
pub mod margin_model;
pub mod transformer;
use nautilus_core::python::to_pyvalue_err;
use pyo3::{Py, PyAny, PyResult, Python, conversion::IntoPyObjectExt};
use crate::{
accounts::{AccountAny, BettingAccount, CashAccount, MarginAccount},
enums::AccountType,
};
#[allow(clippy::needless_pass_by_value)]
pub fn pyobject_to_account_any(py: Python, account: Py<PyAny>) -> PyResult<AccountAny> {
let account_type = account
.getattr(py, "account_type")?
.extract::<AccountType>(py)?;
if account_type == AccountType::Margin {
let margin = account.extract::<MarginAccount>(py)?;
Ok(AccountAny::Margin(margin))
} else if account_type == AccountType::Cash {
let cash = account.extract::<CashAccount>(py)?;
Ok(AccountAny::Cash(cash))
} else if account_type == AccountType::Betting {
let betting = account.extract::<BettingAccount>(py)?;
Ok(AccountAny::Betting(betting))
} else {
Err(to_pyvalue_err("Unsupported account type"))
}
}
pub fn account_any_to_pyobject(py: Python, account: AccountAny) -> PyResult<Py<PyAny>> {
match account {
AccountAny::Margin(account) => account.into_py_any(py),
AccountAny::Cash(account) => account.into_py_any(py),
AccountAny::Betting(account) => account.into_py_any(py),
}
}