use {
crate::types::graphql::{FeeStructureGraphQL, OracleGuardRailsGraphQL},
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 whitelist_mint: Pubkey,
pub discount_mint: Pubkey,
pub signer: Pubkey,
pub srm_vault: Pubkey,
pub perp_fee_structure: FeeStructureGraphQL,
pub spot_fee_structure: FeeStructureGraphQL,
pub oracle_guard_rails: OracleGuardRailsGraphQL,
pub number_of_authorities: U64,
pub number_of_sub_accounts: U64,
pub lp_cooldown_time: U64,
pub liquidation_margin_buffer_ratio: U32,
pub settlement_duration: i32,
pub number_of_markets: i32,
pub number_of_spot_markets: i32,
pub signer_nonce: U8,
pub min_perp_auction_duration: U8,
pub default_market_order_time_in_force: U8,
pub default_spot_auction_duration: U8,
pub exchange_status: U8,
pub liquidation_duration: U8,
pub initial_pct_to_liquidate: i32,
pub max_number_of_sub_accounts: i32,
pub max_initialize_user_fee: i32,
pub feature_bit_flags: U8,
pub lp_pool_feature_bit_flags: U8,
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),
whitelist_mint: carbon_core::graphql::primitives::Pubkey(row.whitelist_mint.0),
discount_mint: carbon_core::graphql::primitives::Pubkey(row.discount_mint.0),
signer: carbon_core::graphql::primitives::Pubkey(row.signer.0),
srm_vault: carbon_core::graphql::primitives::Pubkey(row.srm_vault.0),
perp_fee_structure: row.perp_fee_structure.0.into(),
spot_fee_structure: row.spot_fee_structure.0.into(),
oracle_guard_rails: row.oracle_guard_rails.0.into(),
number_of_authorities: carbon_core::graphql::primitives::U64(
*row.number_of_authorities,
),
number_of_sub_accounts: carbon_core::graphql::primitives::U64(
*row.number_of_sub_accounts,
),
lp_cooldown_time: carbon_core::graphql::primitives::U64(*row.lp_cooldown_time),
liquidation_margin_buffer_ratio: carbon_core::graphql::primitives::U32(
(*row.liquidation_margin_buffer_ratio) as u32,
),
settlement_duration: *row.settlement_duration,
number_of_markets: *row.number_of_markets,
number_of_spot_markets: *row.number_of_spot_markets,
signer_nonce: carbon_core::graphql::primitives::U8((*row.signer_nonce) as u8),
min_perp_auction_duration: carbon_core::graphql::primitives::U8(
(*row.min_perp_auction_duration) as u8,
),
default_market_order_time_in_force: carbon_core::graphql::primitives::U8(
(*row.default_market_order_time_in_force) as u8,
),
default_spot_auction_duration: carbon_core::graphql::primitives::U8(
(*row.default_spot_auction_duration) as u8,
),
exchange_status: carbon_core::graphql::primitives::U8((*row.exchange_status) as u8),
liquidation_duration: carbon_core::graphql::primitives::U8(
(*row.liquidation_duration) as u8,
),
initial_pct_to_liquidate: *row.initial_pct_to_liquidate,
max_number_of_sub_accounts: *row.max_number_of_sub_accounts,
max_initialize_user_fee: *row.max_initialize_user_fee,
feature_bit_flags: carbon_core::graphql::primitives::U8((*row.feature_bit_flags) as u8),
lp_pool_feature_bit_flags: carbon_core::graphql::primitives::U8(
(*row.lp_pool_feature_bit_flags) as u8,
),
padding: row
.padding
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
})
}
}