pub mod create;
pub mod settle;
pub mod slot;
pub mod update;
pub use create::{
CreateMarket, MAX_EXTENSION_MULTIPLIER, MAX_OPEN_INTEREST, MAX_ORDER_BASE_AMOUNT, MAX_ORDER_QUOTE_AMOUNT,
SYMBOL_BYTES, Settlement,
};
pub use settle::SettleMarket;
pub use slot::{BINARY_OPTIONS_SLOTS, MarketSlot, PERPS_SLOTS, SPOT_SLOTS};
pub use update::{MAX_LIQUIDATION_FEE, UpdateMarket};
use crate::client::Network;
use crate::utils::sign::tx::{BadTx, Tx};
#[cfg(feature = "sign")]
use crate::{
account::keys::ApiKey,
client::{Client, Http, SendError, Sent},
utils::sign::SignTxError,
};
pub trait OperatorTx: Tx {}
impl OperatorTx for CreateMarket {}
impl OperatorTx for UpdateMarket {}
impl OperatorTx for SettleMarket {}
pub(crate) fn check_chain(chain_id: u32) -> Result<(), BadTx> {
match Network::ALL.into_iter().find(|network| network.chain_id() == chain_id) {
Some(network) => check_network(network),
None => Ok(()),
}
}
pub fn check_network(network: Network) -> Result<(), BadTx> {
match network.has_binary_options() {
true => Ok(()),
false => Err(BadTx::new("Network", format!("{network} lists no binary options"))),
}
}
#[cfg(feature = "sign")]
pub async fn send_operator<H: Http>(client: &Client<H, ApiKey>, tx: &impl OperatorTx) -> Result<Sent, SendError> {
check_network(client.network()).map_err(|bad| SendError::Sign(SignTxError::Bad(bad)))?;
client.send(tx).await
}
#[cfg(test)]
#[path = "tests/deploy.rs"]
mod tests;