use af_move_type::MoveInstance;
use af_sui_types::{Address, Version};
use futures::Stream;
use sui_gql_client::GraphQlClient;
pub use sui_gql_client::queries::Error;
use crate::Vault;
use crate::orderbook::Order;
use crate::position::Position;
mod ch_orders;
mod ch_positions;
mod ch_vault;
mod map_orders;
mod order_maps;
mod registry;
pub use self::ch_vault::Error as ChVaultError;
pub use self::order_maps::OrderMaps;
type StdResult<T, E> = ::std::result::Result<T, E>;
type Result<T, C> = StdResult<T, Error<<C as GraphQlClient>::Error>>;
pub trait GraphQlClientExt: GraphQlClient + Sized {
fn clearing_house_orders(
&self,
package: Address,
ch: Address,
at_checkpoint: Option<u64>,
asks: bool,
) -> impl Stream<Item = Result<(u128, Order), Self>> + '_ {
ch_orders::query(self, package, ch, at_checkpoint, asks)
}
fn map_orders(
&self,
map: Address,
at_checkpoint: Option<Version>,
) -> impl Stream<Item = Result<(u128, Order), Self>> + '_ {
map_orders::query(self, map, at_checkpoint)
}
fn order_maps(
&self,
package: Address,
ch: Address,
) -> impl Future<Output = Result<OrderMaps, Self>> + Send + '_ {
order_maps::query(self, package, ch)
}
fn clearing_house_vault(
&self,
package: Address,
ch: Address,
) -> impl Future<Output = StdResult<MoveInstance<Vault>, ChVaultError<Self::Error>>> + Send + '_
{
ch_vault::query(self, package, ch)
}
fn clearing_house_positions(
&self,
ch: Address,
at_checkpoint: Option<u64>,
) -> impl Stream<Item = Result<(u64, MoveInstance<Position>), Self>> + '_ {
ch_positions::query(self, ch, at_checkpoint)
}
}
impl<T: GraphQlClient> GraphQlClientExt for T {}