use {
crate::types::graphql::{
AnchorDecimalGraphQL, MarginParametersGraphQL, PerpParametersGraphQL, ProductGraphQL,
},
carbon_core::graphql::primitives::{Pubkey, I64, U64, U8},
juniper::GraphQLObject,
};
#[derive(Debug, Clone, GraphQLObject)]
#[graphql(name = "Pricing")]
pub struct PricingGraphQL {
pub account_metadata: crate::accounts::graphql::AccountMetadataGraphQL,
pub nonce: U8,
pub mark_prices: Vec<U64>,
pub mark_prices_padding: Vec<U64>,
pub update_timestamps: Vec<U64>,
pub update_timestamps_padding: Vec<U64>,
pub funding_deltas: Vec<AnchorDecimalGraphQL>,
pub funding_deltas_padding: Vec<AnchorDecimalGraphQL>,
pub latest_funding_rates: Vec<AnchorDecimalGraphQL>,
pub latest_funding_rates_padding: Vec<AnchorDecimalGraphQL>,
pub latest_midpoints: Vec<U64>,
pub latest_midpoints_padding: Vec<U64>,
pub oracles: Vec<Pubkey>,
pub oracles_padding: Vec<Pubkey>,
pub oracle_backup_feeds: Vec<Pubkey>,
pub oracle_backup_feeds_padding: Vec<Pubkey>,
pub markets: Vec<Pubkey>,
pub markets_padding: Vec<Pubkey>,
pub perp_sync_queues: Vec<Pubkey>,
pub perp_sync_queues_padding: Vec<Pubkey>,
pub perp_parameters: Vec<PerpParametersGraphQL>,
pub perp_parameters_padding: Vec<PerpParametersGraphQL>,
pub margin_parameters: Vec<MarginParametersGraphQL>,
pub margin_parameters_padding: Vec<MarginParametersGraphQL>,
pub products: Vec<ProductGraphQL>,
pub products_padding: Vec<ProductGraphQL>,
pub zeta_group_keys: Vec<Pubkey>,
pub zeta_group_keys_padding: Vec<Pubkey>,
pub total_insurance_vault_deposits: U64,
pub last_withdraw_timestamp: U64,
pub net_outflow_sum: I64,
pub halt_force_pricing: Vec<bool>,
pub halt_force_pricing_padding: Vec<bool>,
pub padding: Vec<U8>,
}
impl TryFrom<crate::accounts::postgres::PricingRow> for PricingGraphQL {
type Error = carbon_core::error::Error;
fn try_from(row: crate::accounts::postgres::PricingRow) -> Result<Self, Self::Error> {
Ok(Self {
account_metadata: row.account_metadata.into(),
nonce: carbon_core::graphql::primitives::U8((*row.nonce) as u8),
mark_prices: row
.mark_prices
.into_iter()
.map(|item| carbon_core::graphql::primitives::U64(*item))
.collect(),
mark_prices_padding: row
.mark_prices_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::U64(*item))
.collect(),
update_timestamps: row
.update_timestamps
.into_iter()
.map(|item| carbon_core::graphql::primitives::U64(*item))
.collect(),
update_timestamps_padding: row
.update_timestamps_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::U64(*item))
.collect(),
funding_deltas: row
.funding_deltas
.0
.into_iter()
.map(|item| item.into())
.collect(),
funding_deltas_padding: row
.funding_deltas_padding
.0
.into_iter()
.map(|item| item.into())
.collect(),
latest_funding_rates: row
.latest_funding_rates
.0
.into_iter()
.map(|item| item.into())
.collect(),
latest_funding_rates_padding: row
.latest_funding_rates_padding
.0
.into_iter()
.map(|item| item.into())
.collect(),
latest_midpoints: row
.latest_midpoints
.into_iter()
.map(|item| carbon_core::graphql::primitives::U64(*item))
.collect(),
latest_midpoints_padding: row
.latest_midpoints_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::U64(*item))
.collect(),
oracles: row
.oracles
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
oracles_padding: row
.oracles_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
oracle_backup_feeds: row
.oracle_backup_feeds
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
oracle_backup_feeds_padding: row
.oracle_backup_feeds_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
markets: row
.markets
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
markets_padding: row
.markets_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
perp_sync_queues: row
.perp_sync_queues
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
perp_sync_queues_padding: row
.perp_sync_queues_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
perp_parameters: row
.perp_parameters
.0
.into_iter()
.map(|item| item.into())
.collect(),
perp_parameters_padding: row
.perp_parameters_padding
.0
.into_iter()
.map(|item| item.into())
.collect(),
margin_parameters: row
.margin_parameters
.0
.into_iter()
.map(|item| item.into())
.collect(),
margin_parameters_padding: row
.margin_parameters_padding
.0
.into_iter()
.map(|item| item.into())
.collect(),
products: row.products.0.into_iter().map(|item| item.into()).collect(),
products_padding: row
.products_padding
.0
.into_iter()
.map(|item| item.into())
.collect(),
zeta_group_keys: row
.zeta_group_keys
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
zeta_group_keys_padding: row
.zeta_group_keys_padding
.into_iter()
.map(|item| carbon_core::graphql::primitives::Pubkey(item.0))
.collect(),
total_insurance_vault_deposits: carbon_core::graphql::primitives::U64(
*row.total_insurance_vault_deposits,
),
last_withdraw_timestamp: carbon_core::graphql::primitives::U64(
*row.last_withdraw_timestamp,
),
net_outflow_sum: carbon_core::graphql::primitives::I64(row.net_outflow_sum),
halt_force_pricing: row.halt_force_pricing.to_vec(),
halt_force_pricing_padding: row.halt_force_pricing_padding.to_vec(),
padding: row
.padding
.into_iter()
.map(carbon_core::graphql::primitives::U8)
.collect(),
})
}
}