use {
crate::types::graphql::{ContractTierGraphQL, OracleSourceGraphQL},
carbon_core::graphql::primitives::{I64, U128, U32, U64, U8},
juniper::GraphQLObject,
serde_json,
};
#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "InitializePerpMarket")]
pub struct InitializePerpMarketGraphQL {
pub instruction_metadata: crate::instructions::graphql::InstructionMetadataGraphQL,
pub market_index: i32,
pub amm_base_asset_reserve: U128,
pub amm_quote_asset_reserve: U128,
pub amm_periodicity: I64,
pub amm_peg_multiplier: U128,
pub oracle_source: OracleSourceGraphQL,
pub contract_tier: ContractTierGraphQL,
pub margin_ratio_initial: U32,
pub margin_ratio_maintenance: U32,
pub liquidator_fee: U32,
pub if_liquidation_fee: U32,
pub imf_factor: U32,
pub active_status: bool,
pub base_spread: U32,
pub max_spread: U32,
pub max_open_interest: U128,
pub max_revenue_withdraw_per_period: U64,
pub quote_max_insurance: U64,
pub order_step_size: U64,
pub order_tick_size: U64,
pub min_order_size: U64,
pub concentration_coef_scale: U128,
pub curve_update_intensity: U8,
pub amm_jit_intensity: U8,
pub name: Vec<U8>,
pub lp_pool_id: U8,
pub accounts: carbon_core::graphql::primitives::Json,
}
impl TryFrom<crate::instructions::postgres::InitializePerpMarketRow>
for InitializePerpMarketGraphQL
{
type Error = carbon_core::error::Error;
fn try_from(
row: crate::instructions::postgres::InitializePerpMarketRow,
) -> Result<Self, Self::Error> {
Ok(Self {
instruction_metadata: row.instruction_metadata.into(),
market_index: *row.market_index,
amm_base_asset_reserve: carbon_core::graphql::primitives::U128(
*row.amm_base_asset_reserve,
),
amm_quote_asset_reserve: carbon_core::graphql::primitives::U128(
*row.amm_quote_asset_reserve,
),
amm_periodicity: carbon_core::graphql::primitives::I64(row.amm_periodicity),
amm_peg_multiplier: carbon_core::graphql::primitives::U128(*row.amm_peg_multiplier),
oracle_source: row.oracle_source.0.into(),
contract_tier: row.contract_tier.0.into(),
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,
),
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,
),
imf_factor: carbon_core::graphql::primitives::U32((*row.imf_factor) as u32),
active_status: row.active_status,
base_spread: carbon_core::graphql::primitives::U32((*row.base_spread) as u32),
max_spread: carbon_core::graphql::primitives::U32((*row.max_spread) as u32),
max_open_interest: carbon_core::graphql::primitives::U128(*row.max_open_interest),
max_revenue_withdraw_per_period: carbon_core::graphql::primitives::U64(
*row.max_revenue_withdraw_per_period,
),
quote_max_insurance: carbon_core::graphql::primitives::U64(*row.quote_max_insurance),
order_step_size: carbon_core::graphql::primitives::U64(*row.order_step_size),
order_tick_size: carbon_core::graphql::primitives::U64(*row.order_tick_size),
min_order_size: carbon_core::graphql::primitives::U64(*row.min_order_size),
concentration_coef_scale: carbon_core::graphql::primitives::U128(
*row.concentration_coef_scale,
),
curve_update_intensity: carbon_core::graphql::primitives::U8(
(*row.curve_update_intensity) as u8,
),
amm_jit_intensity: carbon_core::graphql::primitives::U8((*row.amm_jit_intensity) as u8),
name: row
.name
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
lp_pool_id: carbon_core::graphql::primitives::U8((*row.lp_pool_id) as u8),
accounts: carbon_core::graphql::primitives::Json(
serde_json::to_value(&row.accounts.0)
.map_err(|e| carbon_core::error::Error::Custom(e.to_string()))?,
),
})
}
}