use {
crate::types::graphql::HaltStateV2GraphQL,
carbon_core::graphql::primitives::{Pubkey, U32, U64, U8},
juniper::GraphQLObject,
};
#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "State")]
pub struct StateGraphQL {
pub account_metadata: crate::accounts::graphql::AccountMetadataGraphQL,
pub admin: Pubkey,
pub state_nonce: U8,
pub serum_nonce: U8,
pub mint_auth_nonce: U8,
pub num_underlyings: U8,
pub num_flex_underlyings: U8,
pub null: Vec<U8>,
pub strike_initialization_threshold_seconds: U32,
pub pricing_frequency_seconds: U32,
pub liquidator_liquidation_percentage: U32,
pub insurance_vault_liquidation_percentage: U32,
pub native_d1_trade_fee_percentage: U64,
pub native_d1_underlying_fee_percentage: U64,
pub native_whitelist_underlying_fee_percentage: U64,
pub native_deposit_limit: U64,
pub expiration_threshold_seconds: U32,
pub position_movement_fee_bps: U8,
pub margin_concession_percentage: U8,
pub treasury_wallet_nonce: U8,
pub native_option_trade_fee_percentage: U64,
pub native_option_underlying_fee_percentage: U64,
pub referrals_admin: Pubkey,
pub referrals_rewards_wallet_nonce: U8,
pub max_perp_delta_age: i32,
pub secondary_admin: Pubkey,
pub vault_nonce: U8,
pub insurance_vault_nonce: U8,
pub deprecated_total_insurance_vault_deposits: U64,
pub native_withdraw_limit: U64,
pub withdraw_limit_epoch_seconds: U32,
pub native_open_interest_limit: U64,
pub halt_states: Vec<HaltStateV2GraphQL>,
pub halt_states_padding: Vec<HaltStateV2GraphQL>,
pub padding: Vec<U8>,
}
impl TryFrom<crate::accounts::postgres::StateRow> for StateGraphQL {
type Error = carbon_core::error::Error;
fn try_from(row: crate::accounts::postgres::StateRow) -> Result<Self, Self::Error> {
Ok(Self {
account_metadata: row.account_metadata.into(),
admin: carbon_core::graphql::primitives::Pubkey(row.admin.0),
state_nonce: carbon_core::graphql::primitives::U8((*row.state_nonce) as u8),
serum_nonce: carbon_core::graphql::primitives::U8((*row.serum_nonce) as u8),
mint_auth_nonce: carbon_core::graphql::primitives::U8((*row.mint_auth_nonce) as u8),
num_underlyings: carbon_core::graphql::primitives::U8((*row.num_underlyings) as u8),
num_flex_underlyings: carbon_core::graphql::primitives::U8(
(*row.num_flex_underlyings) as u8,
),
null: row
.null
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
strike_initialization_threshold_seconds: carbon_core::graphql::primitives::U32(
(*row.strike_initialization_threshold_seconds) as u32,
),
pricing_frequency_seconds: carbon_core::graphql::primitives::U32(
(*row.pricing_frequency_seconds) as u32,
),
liquidator_liquidation_percentage: carbon_core::graphql::primitives::U32(
(*row.liquidator_liquidation_percentage) as u32,
),
insurance_vault_liquidation_percentage: carbon_core::graphql::primitives::U32(
(*row.insurance_vault_liquidation_percentage) as u32,
),
native_d1_trade_fee_percentage: carbon_core::graphql::primitives::U64(
*row.native_d1_trade_fee_percentage,
),
native_d1_underlying_fee_percentage: carbon_core::graphql::primitives::U64(
*row.native_d1_underlying_fee_percentage,
),
native_whitelist_underlying_fee_percentage: carbon_core::graphql::primitives::U64(
*row.native_whitelist_underlying_fee_percentage,
),
native_deposit_limit: carbon_core::graphql::primitives::U64(*row.native_deposit_limit),
expiration_threshold_seconds: carbon_core::graphql::primitives::U32(
(*row.expiration_threshold_seconds) as u32,
),
position_movement_fee_bps: carbon_core::graphql::primitives::U8(
(*row.position_movement_fee_bps) as u8,
),
margin_concession_percentage: carbon_core::graphql::primitives::U8(
(*row.margin_concession_percentage) as u8,
),
treasury_wallet_nonce: carbon_core::graphql::primitives::U8(
(*row.treasury_wallet_nonce) as u8,
),
native_option_trade_fee_percentage: carbon_core::graphql::primitives::U64(
*row.native_option_trade_fee_percentage,
),
native_option_underlying_fee_percentage: carbon_core::graphql::primitives::U64(
*row.native_option_underlying_fee_percentage,
),
referrals_admin: carbon_core::graphql::primitives::Pubkey(row.referrals_admin.0),
referrals_rewards_wallet_nonce: carbon_core::graphql::primitives::U8(
(*row.referrals_rewards_wallet_nonce) as u8,
),
max_perp_delta_age: *row.max_perp_delta_age,
secondary_admin: carbon_core::graphql::primitives::Pubkey(row.secondary_admin.0),
vault_nonce: carbon_core::graphql::primitives::U8((*row.vault_nonce) as u8),
insurance_vault_nonce: carbon_core::graphql::primitives::U8(
(*row.insurance_vault_nonce) as u8,
),
deprecated_total_insurance_vault_deposits: carbon_core::graphql::primitives::U64(
*row.deprecated_total_insurance_vault_deposits,
),
native_withdraw_limit: carbon_core::graphql::primitives::U64(
*row.native_withdraw_limit,
),
withdraw_limit_epoch_seconds: carbon_core::graphql::primitives::U32(
(*row.withdraw_limit_epoch_seconds) as u32,
),
native_open_interest_limit: carbon_core::graphql::primitives::U64(
*row.native_open_interest_limit,
),
halt_states: row
.halt_states
.0
.into_iter()
.map(|item| item.into())
.collect(),
halt_states_padding: row
.halt_states_padding
.0
.into_iter()
.map(|item| item.into())
.collect(),
padding: row
.padding
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
})
}
}