use {
crate::types::graphql::{
AMMGraphQL, ContractTierGraphQL, ContractTypeGraphQL, InsuranceClaimGraphQL,
MarketStatusGraphQL, PoolBalanceGraphQL,
},
carbon_core::graphql::primitives::{Pubkey, I64, U32, U64, U8},
juniper::GraphQLObject,
};
#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "PerpMarket")]
pub struct PerpMarketGraphQL {
pub account_metadata: crate::accounts::graphql::AccountMetadataGraphQL,
pub pubkey: Pubkey,
pub amm: AMMGraphQL,
pub pnl_pool: PoolBalanceGraphQL,
pub name: Vec<U8>,
pub insurance_claim: InsuranceClaimGraphQL,
pub unrealized_pnl_max_imbalance: U64,
pub expiry_ts: I64,
pub expiry_price: I64,
pub next_fill_record_id: U64,
pub next_funding_rate_record_id: U64,
pub next_curve_record_id: U64,
pub imf_factor: U32,
pub unrealized_pnl_imf_factor: U32,
pub liquidator_fee: U32,
pub if_liquidation_fee: U32,
pub margin_ratio_initial: U32,
pub margin_ratio_maintenance: U32,
pub unrealized_pnl_initial_asset_weight: U32,
pub unrealized_pnl_maintenance_asset_weight: U32,
pub number_of_users_with_base: U32,
pub number_of_users: U32,
pub market_index: i32,
pub status: MarketStatusGraphQL,
pub contract_type: ContractTypeGraphQL,
pub contract_tier: ContractTierGraphQL,
pub paused_operations: U8,
pub quote_spot_market_index: i32,
pub fee_adjustment: i32,
pub fuel_boost_position: U8,
pub fuel_boost_taker: U8,
pub fuel_boost_maker: U8,
pub pool_id: U8,
pub high_leverage_margin_ratio_initial: i32,
pub high_leverage_margin_ratio_maintenance: i32,
pub protected_maker_limit_price_divisor: U8,
pub protected_maker_dynamic_divisor: U8,
pub lp_fee_transfer_scalar: U8,
pub lp_status: U8,
pub lp_paused_operations: U8,
pub lp_exchange_fee_excluscion_scalar: U8,
pub last_fill_price: U64,
pub lp_pool_id: U8,
pub market_config: U8,
pub padding: Vec<U8>,
}
impl TryFrom<crate::accounts::postgres::PerpMarketRow> for PerpMarketGraphQL {
type Error = carbon_core::error::Error;
fn try_from(row: crate::accounts::postgres::PerpMarketRow) -> Result<Self, Self::Error> {
Ok(Self {
account_metadata: row.account_metadata.into(),
pubkey: carbon_core::graphql::primitives::Pubkey(row.pubkey.0),
amm: row.amm.0.into(),
pnl_pool: row.pnl_pool.0.into(),
name: row
.name
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
insurance_claim: row.insurance_claim.0.into(),
unrealized_pnl_max_imbalance: carbon_core::graphql::primitives::U64(
*row.unrealized_pnl_max_imbalance,
),
expiry_ts: carbon_core::graphql::primitives::I64(row.expiry_ts),
expiry_price: carbon_core::graphql::primitives::I64(row.expiry_price),
next_fill_record_id: carbon_core::graphql::primitives::U64(*row.next_fill_record_id),
next_funding_rate_record_id: carbon_core::graphql::primitives::U64(
*row.next_funding_rate_record_id,
),
next_curve_record_id: carbon_core::graphql::primitives::U64(*row.next_curve_record_id),
imf_factor: carbon_core::graphql::primitives::U32((*row.imf_factor) as u32),
unrealized_pnl_imf_factor: carbon_core::graphql::primitives::U32(
(*row.unrealized_pnl_imf_factor) as u32,
),
liquidator_fee: carbon_core::graphql::primitives::U32((*row.liquidator_fee) as u32),
if_liquidation_fee: carbon_core::graphql::primitives::U32(
(*row.if_liquidation_fee) as u32,
),
margin_ratio_initial: carbon_core::graphql::primitives::U32(
(*row.margin_ratio_initial) as u32,
),
margin_ratio_maintenance: carbon_core::graphql::primitives::U32(
(*row.margin_ratio_maintenance) as u32,
),
unrealized_pnl_initial_asset_weight: carbon_core::graphql::primitives::U32(
(*row.unrealized_pnl_initial_asset_weight) as u32,
),
unrealized_pnl_maintenance_asset_weight: carbon_core::graphql::primitives::U32(
(*row.unrealized_pnl_maintenance_asset_weight) as u32,
),
number_of_users_with_base: carbon_core::graphql::primitives::U32(
(*row.number_of_users_with_base) as u32,
),
number_of_users: carbon_core::graphql::primitives::U32((*row.number_of_users) as u32),
market_index: *row.market_index,
status: row.status.0.into(),
contract_type: row.contract_type.0.into(),
contract_tier: row.contract_tier.0.into(),
paused_operations: carbon_core::graphql::primitives::U8((*row.paused_operations) as u8),
quote_spot_market_index: *row.quote_spot_market_index,
fee_adjustment: row.fee_adjustment as i32,
fuel_boost_position: carbon_core::graphql::primitives::U8(
(*row.fuel_boost_position) as u8,
),
fuel_boost_taker: carbon_core::graphql::primitives::U8((*row.fuel_boost_taker) as u8),
fuel_boost_maker: carbon_core::graphql::primitives::U8((*row.fuel_boost_maker) as u8),
pool_id: carbon_core::graphql::primitives::U8((*row.pool_id) as u8),
high_leverage_margin_ratio_initial: *row.high_leverage_margin_ratio_initial,
high_leverage_margin_ratio_maintenance: *row.high_leverage_margin_ratio_maintenance,
protected_maker_limit_price_divisor: carbon_core::graphql::primitives::U8(
(*row.protected_maker_limit_price_divisor) as u8,
),
protected_maker_dynamic_divisor: carbon_core::graphql::primitives::U8(
(*row.protected_maker_dynamic_divisor) as u8,
),
lp_fee_transfer_scalar: carbon_core::graphql::primitives::U8(
(*row.lp_fee_transfer_scalar) as u8,
),
lp_status: carbon_core::graphql::primitives::U8((*row.lp_status) as u8),
lp_paused_operations: carbon_core::graphql::primitives::U8(
(*row.lp_paused_operations) as u8,
),
lp_exchange_fee_excluscion_scalar: carbon_core::graphql::primitives::U8(
(*row.lp_exchange_fee_excluscion_scalar) as u8,
),
last_fill_price: carbon_core::graphql::primitives::U64(*row.last_fill_price),
lp_pool_id: carbon_core::graphql::primitives::U8((*row.lp_pool_id) as u8),
market_config: carbon_core::graphql::primitives::U8((*row.market_config) as u8),
padding: row
.padding
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
})
}
}