use crate::core::indexer::NadoIndexer;
use crate::utils::wrapped_option_utils::{
wrapped_option_u64, wrapped_option_vec_bytes32, wrapped_option_vec_u32,
};
use crate::{build_and_call, nado_builder};
use eyre::{eyre, Result};
use crate::indexer;
use crate::indexer::OrdersResponse;
use crate::serialize_utils::WrappedU32;
use crate::trigger::TriggerType;
nado_builder!(
HistoricalOrdersBuilder,
NadoIndexer,
subaccounts: Vec<[u8; 32]>,
product_ids: Vec<u32>,
trigger_types: Vec<TriggerType>,
max_time: u64,
limit: u32,
idx: u64,
digests: Vec<[u8; 32]>,
isolated: bool;
build_and_call!(self, query, get_historical_orders => OrdersResponse);
pub fn build(&self) -> Result<indexer::Query> {
self.validate_build_conditions()?;
let product_ids = wrapped_option_vec_u32(self.product_ids.clone());
let trigger_types = self.trigger_types.clone();
Ok(indexer::Query::Orders {
subaccounts: wrapped_option_vec_bytes32(self.subaccounts.clone()),
product_ids,
digests: wrapped_option_vec_bytes32(self.digests.clone()),
max_time: wrapped_option_u64(self.max_time),
limit: self.limit.map(WrappedU32),
idx: wrapped_option_u64(self.idx),
isolated: self.isolated,
trigger_types,
})
}
fn validate_build_conditions(&self) -> Result<()> {
if self.subaccounts.is_none() && self.digests.is_none() {
return Err(eyre!(
"historical orders: subaccounts or digests must be set"
));
}
Ok(())
}
);